Download presentation
Presentation is loading. Please wait.
1
EECS 110: Lec 13: Dictionaries
Aleksandar Kuzmanovic Northwestern University
2
EECS 110 Today Today: Hw 5 Next week: Python's objects & Classes
Due this Sunday files dictionaries Next week: Python's objects & Classes
3
+= mutates Mutable Data (lists)
WARNING: For mutable data types, the following are NOT the same MUTATES A (B changes too) A = [] B = A A += [42, 42] NOT THE SAME! A = [] B = A A = A + [42, 42] COPIES A (B does not change)
4
More Practice with Mutation
What are the values of A, B, C and D at the indicated points? def mystery1(L1, N, C): for i in L1: if i == N: C += 1 return C def mystery2(C): for i in range(len(C)): C[i] *= 2 >>> A = [22, 10, 30] >>> B = 22 >>> C = 0 >>> D = mystery1(A, B, C) >>> mystery2(A) 1) 2) 1 2
5
More Practice with Mutation
What are the values of A, B, C and D at the indicated points? def mystery1(L1, N, C): for i in L1: if i == N: C += 1 return C def mystery2(C): for i in range(len(C)): C[i] *= 2 >>> A = [22, 10, 30] >>> B = 22 >>> C = 0 >>> D = mystery1(A, B, C) >>> mystery2(A) >>> A 1) 2) A = [22, 10, 30] B = 22 C = 0 D = 1 1 2
6
More Practice with Mutation
What are the values of A, B, C and D at the indicated points? def mystery1(L1, N, C): for i in L1: if i == N: C += 1 return C def mystery2(C): for i in range(len(C)): C[i] *= 2 >>> A = [22, 10, 30] >>> B = 22 >>> C = 0 >>> D = mystery1(A, B, C) >>> mystery2(A) >>> A 1) 2) A = [22, 10, 30] B = 22 C = 0 D = 1 A = [44, 20, 60] 1 2
7
Name that author… ?
8
HW5 Pr 2: Read some text and automatically generate new (reasonable
HW5 Pr 2: Read some text and automatically generate new (reasonable?) text
9
No end to the WMSCI emails…
Randomly-generated submission accepted to WMSCI No end to the WMSCI s…
10
Markov Model I like spam. I like toast and spam. The text file:
Technique for modeling any sequence of natural data 1st-order Markov Model Each item depends on only the item immediately before it . I like spam. I like toast and spam. I eat ben and jerry's ice cream too. The text file: For each word, keep track of the words that can follow it (and how often) The Model: I: like, like, eat like: spam, toast spam.: $ $: I, I, I toast: and eat: ben and: spam, jerry's ben: and jerry's: ice ice: cream cream: too. too.: $ We can repeat words to indicate frequency $ indicates beginning of a sentence
11
I like spam. I like spam. I like toast and jerry's ice cream too.
Generative Markov Model Technique for modeling any sequence of natural data Each item depends on only the item immediately before it . A key benefit is that the model can generate feasible data! I like spam. I like spam. I like toast and jerry's ice cream too. Generating text: 1) start with the '$' string 2) choose a word following '$', at random. Call it w 3) choose a word following w, at random. And so on… 4) If w ends a sentence, '$' becomes the next word.
12
HW5 Pr 2: Need to be able to…
Read text from a file Compute and store the model Generate the new text
13
Reading Files In Python reading files is no problem…
>>> f = open( 'a.txt' ) >>> text = f.read() >>> text 'This is a file.\nLine 2\nLast line!\n' >>> f.close()
14
Files In Python reading files is no problem…
>>> f = open( 'a.txt' ) >>> text = f.read() >>> text 'This is a file.\nLine 2\nLast line!\n' >>> f.close() opens the file and calls it f reads the whole file and calls it text text is a single string containing all the text in the file But how to process the text from here…? closes the file (closing Python does the same)
15
String Manupulation >>> text
'This is a file.\nLine 2\nLast line!\n' >>> print(text) This is a file. Line 2 Last line! >>> text.split() ['This', 'is', 'a', 'file.', 'Line', '2', 'Last', 'line!'] >>> lines = text.split('\n') >>> lines ['This is a file.', 'Line 2', 'Last line!', ''] Returns a list of the words in the string (splitting at spaces, tabs and newlines) Returns a list of the lines in the string (splitting at newlines)
16
Objects, objects, everywhere!
>>> L = [] # create a list, L >>> dir(L) # see all of L's methods all list methods appear -- lots of them including append, index, remove, and sort >>> help(L.sort) # I wonder… index: integer – return first index of value >>> help(L.index) # What does this do?
17
but there's a fundamental difference… what and why?
List methods String methods >>> dir([]) >>> dir('') capitalize center count find index isalpha lower replace split strip title upper and ~10 more… append count extend index insert pop remove reverse sort help can help but there's a fundamental difference… what and why?
18
Mutable vs. immutable objects
Strings are immutable objects. Lists are mutable objects. (So are numbers.) >>> s = 'string' >>> s.replace('st','') 'ring' >>> s 'string' >>> L = [2,1,3] >>> L.sort() >>> L [1,2,3] no return value returns a NEW string L has changed. s has NOT changed
19
HW5 Pr 2: Need to be able to…
Read text from a file Compute and store the model Generate the new text
20
Lists vs. Dictionaries Lists are not perfect… L reference 5 42 L[0]
21
Lists vs. Dictionaries Lists are not perfect…
reference 5 42 You can't choose what to name data. L L[0] L[1] L[0], L[1], …
22
Lists vs. Dictionaries Lists are not perfect…
reference 5 42 You can't choose what to name data. L L[0] L[1] L[0], L[1], … You have to start at 0. L[1988] = 'dragon' L[1989] = 'snake'
23
Lists vs. Dictionaries Lists are not perfect…
reference 5 42 You can't choose what to name data. L L[0] L[1] L[0], L[1], … You have to start at 0. L[1988] = 'dragon' L[1989] = 'snake' Some operations can be slow for big lists … if 'dragon' in L:
24
Lists vs. Dictionaries In Python a dictionary is a set of key - value pairs. >>> d = {} >>> d[1988] = 'dragon' >>> d[1989] = 'snake' >>> d {1988: 'dragon', 1989: 'snake'} >>> d[1988] 'dragon' >>> d[1987] key error It's a list where the index can be any immutable-type key.
25
Lists vs. Dictionaries In Python a dictionary is a set of key - value pairs. >>> d = {} >>> d[1988] = 'dragon' >>> d[1989] = 'snake' >>> d {1988: 'dragon', 1989: 'snake'} >>> d[1988] 'dragon' >>> d[1987] key error creates an empty dictionary, d 1988 is the key 'dragon' is the value 1989 is the key 'snake' is the value Anyone seen this before? Retrieve data as with lists… or almost ! It's a list where the index can be any immutable-type key.
26
delete a key (and its value)
More on dictionaries Dictionaries have lots of built-in methods: >>> d = {1988: 'dragon', 1989: 'snake'} >>> d.keys() [ 1989, 1988 ] >>> 1988 in d True >>> 1969 in d False >>> d.pop( 1988 ) 'dragon' get all keys check if a key is present delete a key (and its value)
27
A family dictionary?
28
A family dictionary… T['abe'] T = {'abe' :['homer','herb'],
'jackie':['marge','patty','selma'], 'homer' :['hugo','bart','lisa','maggie'], 'marge' :['hugo','bart','lisa','maggie']} keys can be any immutable type values can be any type at all… T['abe'] How to get 'selma' from T?
29
A family dictionary… T['abe'] T = {'abe' :['homer','herb'],
'jackie':['marge','patty','selma'], 'homer' :['hugo','bart','lisa','maggie'], 'marge' :['hugo','bart','lisa','maggie']} keys can be any immutable type values can be any type at all… T['abe'] ['homer','herb'] How to get 'selma' from T?
30
A family dictionary… T['abe'] T = {'abe' :['homer','herb'],
'jackie':['marge','patty','selma'], 'homer' :['hugo','bart','lisa','maggie'], 'marge' :['hugo','bart','lisa','maggie']} keys can be any immutable type values can be any type at all… T['abe'] ['homer','herb'] How to get 'selma' from T? T['jackie'][2] (T['jackie'] is a list)
31
A functional family? def favChild( person, Tree ):
""" person is a name (a string) Tree is a dictionary of children returns person's favorite child """ if person in Tree: Kids = Tree[person] Kids.sort() return Kids[0] else: return 'no children' Who is favored ? Side effects ?
32
A functional family? def addChild( person, Tree, jr ):
For example, >>> addChild( 'lisa', T, 'abejr' ) def addChild( person, Tree, jr ): """ adds person's new child to Tree ""“
33
A functional family? def addChild( person, Tree, jr ):
For example, >>> addChild( 'lisa', T, 'abejr' ) def addChild( person, Tree, jr ): """ adds person's new child to Tree ""“ if person in Tree: kids = Tree[person] kids += [jr]
34
A challenge… prov = { 'BC': 0, 'AB': 0, … }
def provinceChallenge( prov ): """ prov is a dictionary of Canada's provinces -- the challenge is to name them all! """ while 0 in prov.values(): guess = input("Name a province: ") if guess not in prov: print 'Try again...' elif prov[guess] == 0: print 'Yes!' prov[guess] += 1 else: print('Already guessed...’) print('Phew!’) help?!
35
“Quiz” def favChild( person, Tree ): if person in Tree: Kids = Tree[person] Kids.sort() return Kids[0] else: return 'no children' Change this code so that it keeps track of how many times you've guessed each item. first, for real provinces then, for incorrect guesses… Based on favChild, write favGChild to return the first grandchild alphabetically - or return 'no one' if there are none. def provinceChallenge( prov ): while 0 in prov.values(): guess = input("Guess: ") if guess not in prov: print('Try again...’) elif prov[guess] == 0: print('Yes!’) prov[guess] += 1 else: print('Already guessed...') def favGChild( person, Tree ):
36
def provinceChallenge( prov ): while 0 in prov.values():
Change this code so that it tells you how many times you've guessed the same province… first, for real provinces then, for incorrect guesses… def provinceChallenge( prov ): while 0 in prov.values(): guess = input("Guess: ") if guess not in prov: print('Try again... ’) elif prov[guess] == 0: print('Yes!’) prov[guess] += 1 else: print('Already guessed...‘)
37
def provinceChallenge( prov ): prov['incorrect']=0
Change this code so that it tells you how many times you've guessed the same province… first, for real provinces then, for incorrect guesses… def provinceChallenge( prov ): prov['incorrect']=0 while 0 in prov.values(): guess = input("Guess: ") if guess not in prov: print('Try again... ’) prov['incorrect'] += 1 elif prov[guess] == 0: print('Yes!’) prov[guess] += 1 else: print('Already guessed...‘)
38
def favChild( person, Tree ):
if person in Tree: Kids = Tree[person] Kids.sort() return Kids[0] else: return 'no children' Based on favChild, write favGChild to return the first grandchild alphabetically - or return 'no one' if there are none.
39
def favGChild( person, Tree ): gChildren = [] if person in Tree :
def favChild( person, Tree ): if person in Tree: Kids = Tree[person] Kids.sort() return Kids[0] else: return 'no children' Based on favChild, write favGChild to return the first grandchild alphabetically - or return 'no one' if there are none. def favGChild( person, Tree ): gChildren = [] if person in Tree : for child in Tree[person]: if child in Tree: gChildren += Tree[child] if gChildren == []: return 'no one' else: gChildren.sort() return gChildren[0]
40
Markov Model I like spam. I like toast and spam. The text file:
Technique for modeling any sequence of natural data Each item depends on only the item immediately before it . I like spam. I like toast and spam. I eat ben and jerry's ice cream too. The text file: { 'toast': ['and'], 'and' : ['spam.', "jerry's"], 'like' : ['spam.', 'toast'], 'ben' : ['and'], 'I' : ['like', 'like', 'eat'], '$' : ['I', 'I', 'I'], The Model:
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.