0% found this document useful (0 votes)
27 views30 pages

Py4Inf 09 Dictionaries

Uploaded by

junedijoasli
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views30 pages

Py4Inf 09 Dictionaries

Uploaded by

junedijoasli
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

Python Dictionaries

Chapter 9

Python for Informatics: Exploring Information


www.py4inf.com
Unless otherwise noted, the content of this course material is licensed under a Creative
Commons Attribution 3.0 License.
http://creativecommons.org/licenses/by/3.0/.

Copyright 2010, 2011, Charles Severance


What is a Collection?

• A collection is nice because we can put more than one value in them
and carry them all around in one convenient package.

• We have a bunch of values in a single “variable”

• We do this by having more than one place “in” the variable.

• We have ways of finding the different places in the variable


What is not a “Collection”
• Most of our variables have one value in them - when we put a new
value in the variable - the old value is over written

$ python
Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53)
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
>>> x = 2
>>> x = 4
>>> print x
4
A Story of Two Collections..

• List

• A linear collection of values that stay in order

• Dictionary

• A “bag” of values, each with its own label


Dictionaries
tissue
calculator

perfume
money
candy

http://en.wikipedia.org/wiki/Associative_array
Dictionaries
• Dictionaries are Python’s most powerful data collection

• Dictionaries allow us to do fast database-like operations in Python

• Dictionaries have different names in different languages

• Associative Arrays - Perl / Php

• Properties or Map or HashMap - Java

• Property Bag - C# / .Net


http://en.wikipedia.org/wiki/Associative_array
Dictionaries
>>> purse = dict()
• Lists index their entries >>> purse['money'] = 12
based on the position in the >>> purse['candy'] = 3
list >>> purse['tissues'] = 75
>>> print purse
• Dictionaries are like bags - {'money': 12, 'tissues': 75, 'candy': 3}
no order >>> print purse['candy']
3
• So we index the things we >>> purse['candy'] = purse['candy'] + 2
put in the dictionary with a >>> print purse
“lookup tag” {'money': 12, 'tissues': 75, 'candy': 5}
>>> purse = dict()

>>> purse['money'] = 12 money


candy 12
>>> purse['candy'] = 3 3
>>> purse['tissues'] = 75 tissues
75
>>> print purse
{'money': 12, 'tissues': 75, 'candy': 3}
candy
5
>>> print purse['candy']
3

>>> purse['candy'] = purse['candy'] + 2

>>> print purse


{'money': 12, 'tissues': 75, 'candy': 5}
Comparing Lists and Dictionaries
• Dictionaries are like Lists except that they use keys instead of
numbers to look up values

>>> lst = list() >>> ddd = dict()


>>> lst.append(21) >>> ddd['age'] = 21
>>> lst.append(183) >>> ddd['course'] = 182
>>> print lst >>> print ddd
[21, 183] {'course': 182, 'age': 21}
>>> lst[0] = 23 >>> ddd['age'] = 23
>>> print lst >>> print ddd
[23, 183] {'course': 182, 'age': 23}
>>> lst = list()
>>> lst.append(21) List
>>> lst.append(183) Key Value
>>> print lst
[0] 21
[21, 183] lll
>>> lst[0] =2323 [1] 183
>>> print lst
[23, 183]
>>> ddd = dict()
>>> ddd['age'] = 21 Dictionary
>>> ddd['course'] = 182 Key Value
>>> print ddd
{'course': 182, 'age': 21} [course] 183
ddd
>>> ddd['age'] = 23 23 [age] 21
>>> print ddd
{'course': 182, 'age': 23}
Dictionary Literals (Constants)
• Dictionary literals use curly braces and have a list of key : value pairs

• You can make an empty dictionary using empty curly braces

>>> jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}


>>> print jjj
{'jan': 100, 'chuck': 1, 'fred': 42}
>>> ooo = { }
>>> print ooo
{}
>>>
Most Common Name?

zhen zhen marquard cwen


csev
csev zhen
marquard marquard
csev cwen
zhen
zhen
Most Common Name?

zhen zhen marquard cwen


csev
csev zhen
marquard marquard
csev cwen
zhen zhen
Many Counters with a Dictionary
• One common use of dictionary is Key Value
counting how often we “see” something

>>> ccc = dict()


>>> ccc['csev'] = 1
>>> ccc['cwen'] = 1
>>> print ccc
{'csev': 1, 'cwen': 1}
>>> ccc['cwen'] = ccc['cwen'] + 1
>>> print ccc
{'csev': 1, 'cwen': 2}
Dictionary Tracebacks
• It is an error to reference a key which is not in the dictionary

• We can use the in operator to see if a key is in the dictionary


>>> ccc = dict()
>>> print ccc['csev']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'csev'
>>> print 'csev' in ccc
False
When we see a new name
• When we encounter a new name, we need to add a new entry in the
dictionary and if this the second or later time we have seen the name,
we simply add one to the count in the dictionary under that name

counts = dict()
names = ['csev', 'cwen', 'csev', 'zqian', 'cwen']
for name in names :
if name in counts:
counts[name] = counts[name] + 1
else :
counts[name] = 1 {'csev': 2, 'zqian': 1, 'cwen': 2}
print counts
The get method for dictionary
if name in counts:
• This pattern of checking to print counts[name]
see if a key is already in a else :
dictionary and assuming a print 'Not found'
default value if the key is not
there is so common, that
there is a method called get()
that does this for us print counts.get(name, 'Not found')

Default value if key does not


exist (and no Traceback).
Simplified counting with get()
• We can use get() and provide a default value of zero when the key is
not yet in the dictionary - and then just add one

counts = dict()
names = ['csev', 'cwen', 'csev', 'zqian', 'cwen']
for name in names :
counts[name] = counts.get(name, 0) + 1
print counts

Default
{'csev': 2, 'zqian': 1, 'cwen': 2}
Writing programs (or programming) is a very creative and rewarding activity. You can
write programs for many reasons ranging from making your living to solving a difficult
data analysis problem to having fun to helping someone else solve a problem. This
book assumes that everyone needs to know how to program and that once you know
how to program, you will figure out what you want to do with your newfound skills.
We are surrounded in our daily lives with computers ranging from laptops to cell
phones. We can think of these computers as our ``personal assistants'' who can take
care of many things on our behalf. The hardware in our current-day computers is
essentially built to continuously ask us the question, ``What would you like me to do
next?''.
Our computers are fast and have vasts amounts of memory and could be very helpful
to us if we only knew the language to speak to explain to the computer what we
would like it to ``do next''. If we knew this language we could tell the computer to do
tasks on our behalf that were reptitive. Interestingly, the kinds of things computers can
do best are often the kinds of things that we humans find boring and mind-numbing.
the clown ran after the car and the car ran into the tent and the
tent fell down on the clown and the car
Counting Pattern
counts = dict()
print 'Enter a line of text:' The general pattern to count the
line = raw_input('') words in a line of text is to split
the line into words, then loop
words = line.split() thrugh the words and use a
print 'Words:', words dictionary to track the count of
each word independently.
print 'Counting...'
for word in words:
counts[word] = counts.get(word,0) + 1

print 'Counts', counts


Counting Words
python wordcount.py
Enter a line of text:
the clown ran after the car and the car ran into the tent
and the tent fell down on the clown and the car

Words: ['the', 'clown', 'ran', 'after', 'the', 'car', 'and', 'the',


'car', 'ran', 'into', 'the', 'tent', 'and', 'the', 'tent', 'fell', 'down',
'on', 'the', 'clown', 'and', 'the', 'car']
Counting...

Counts {'and': 3, 'on': 1, 'ran': 2, 'car': 3, 'into': 1, 'after': 1,


'clown': 2, 'down': 1, 'fell': 1, 'the': 7, 'tent': 2}
http://www.flickr.com/photos/71502646@N00/2526007974/
python wordcount.py
Enter a line of text:
counts = dict() the clown ran after the car and the car
print 'Enter a line of text:' ran into the tent and the tent fell down
line = raw_input('') on the clown and the car
words = line.split() Words: ['the', 'clown', 'ran', 'after', 'the',
print 'Words:', words 'car', 'and', 'the', 'car', 'ran', 'into', 'the',
'tent', 'and', 'the', 'tent', 'fell', 'down', 'on',
print 'Counting...' 'the', 'clown', 'and', 'the', 'car']
for word in words: Counting...
counts[word] = counts.get(word,0) + 1

print 'Counts', counts Counts {'and': 3, 'on': 1, 'ran': 2, 'car': 3,


'into': 1, 'after': 1, 'clown': 2, 'down': 1,
'fell': 1, 'the': 7, 'tent': 2}
Definite Loops and Lists
• This is very similar to when we used the built-in functions range() and
len() to construct a for loop through the items in a list using an index
variable as the iteration variable
>>> prices = [20, 30, 15]
>>> for ind in range(len(prices)) :
... print ind, prices[ind]
...
0 20
1 30
2 15
>>>
Definite Loops and Dictionaries
• Even though dictionaries are not stored in order, we can write a for
loop that goes through all the entries in a dictionary - actually it goes
through all of the keys in the dictionary and looks up the values
>>> counts = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
>>> for key in counts:
... print key, counts[key]
...
jan 100
chuck 1
fred 42
>>>
Retrieving lists of Keys and Values
>>> jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
>>> print list(jjj)
['jan', 'chuck', 'fred']
• You can get a list of keys, >>> print jjj.keys()
values or items (both) from a ['jan', 'chuck', 'fred']
dictionary >>> print jjj.values()
[100, 1, 42]
>>> print jjj.items()
[('jan', 100), ('chuck', 1), ('fred', 42)]
>>>

What is a 'tuple'? - coming soon...


Bonus: Two Iteration Variables!
• We loop through the
>>> jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
key-value pairs in a
dictionary using *two* >>> for aaa,bbb in jjj.items() :
iteration variables ... print aaa, bbb
...
• Each iteration, the first jan 100
chuck 1 aaa bbb
variable is the key and
the the second variable is fred 42 [jan] 100
the corresponding value >>>
[chuck] 1
for the key
[fred] 42
name = raw_input("Enter file:")
handle = open(name, 'r')
text = handle.read()
words = text.split() python words.py
Enter file: words.txt
counts = dict() to 16
for word in words:
counts[word] = counts.get(word,0) + 1

bigcount = None
bigword = None python words.py
for word,count in counts.items(): Enter file: clown.txt
if bigcount is None or count > bigcount: the 7
bigword = word
bigcount = count

print bigword, bigcount Dictionaries


Summary
• What is a collection? • Hashing, and lack of
order
• Lists versus Dictionaries
• Dictionary constants • Writing dictionary loops
• The most common word • Sneak peek: tuples
• Using the get() method • Sorting dictionaries

You might also like