Introduction to Python Dictionaries - Brown...

54
Introduction to Python Dictionaries CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 1

Transcript of Introduction to Python Dictionaries - Brown...

Introduction to Python Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 1

Warmup

• Brief discussion of list sorting • Discussion of types in Python

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 2

Sorting Lists

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 3

Preloaded Functions

Name Inputs Outputs CHANGES sort List Original List!

>>> myList = [0,4,1,5,-1,6] >>> myList.sort() >>> myList [-1, 0, 1, 4, 5, 6]

Sorting Lists

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 4

Preloaded Functions

Name Inputs Outputs CHANGES sort List Original List!

>>> myList = [0,4,1,5,-1,6] >>> myList.sort() >>> myList [-1, 0, 1, 4, 5, 6] >>> myList = ['b','d','c','a','z','i'] >>> myList.sort() >>> myList ['a', 'b', 'c', 'd', 'i', 'z']

Types • When we write > x = 4 The number 4 is an integer, and it cannot be changed: 4 always means 4. • We say that “integers are not mutable” • Some other Python types are mutable: > lst = [1, 2, 3] > lst[0]=5 > lst [5, 2, 3] • The thing that lst refers to has changed!

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 5

Subtleties

• Subscripted list assignment is not a reassignment: it’s a MUTATION

>>> lst = [1, 2, 3]

>>> lst2 = lst

>>> lst[0] = 5

>>> lst2

[5, 2, 3] (!)

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 6

>>> lst = [1, 2, 3]

>>> lst2 = lst

>>> lst[0] = 5

>>> lst2

[5, 2, 3]

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 7

vars

Name Value lst [1 2 3]

vars

Name Value lst

lst2

[1 2 3]

vars

Name Value lst

lst2

[5 2 3]

What just happened? (v1)

>>> num = 7

>>> num2 = num

>>> num = 4 #reassignment!

>>> num2

7

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 8

vars

Name Value num 7

vars

Name Value num

num2

7

vars

Name Value num

num2

7

Compare with integer values 4

>>> lst = [1, 2, 3]

>>> lst[0] = 7

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 9

vars

Name Value lst

[ , , ]

What just happened? (v2)

3 1 2

7

General Rules

• “Primitive types” like int, float, string are created and stored somewhere

• Variables store “arrows” pointing to these • Assignments like “x = 4” create new arrows to

new stored values • Subscripted assignments like “lst[3] = 2” replace

the arrow at “lst[3]” with a new stored value • Slice assignments like lst[0:2] = [5] replace

multiple arrows (more details later)

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 10

Disclaimer

• This story is one that’s consistent with the behavior of the part of Python that you’ll see in CS0931

• The whole story is somewhat deeper...

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 11

HW 2-3

• removePunctuation() – Look at the output you get and see if you need to

catch more types of punctuation – How do we check for quotation marks?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 12

HW 2-3

• removePunctuation() – Look at the output you get and see if you need to

catch more types of punctuation – How do we check for quotation marks?

• Remember how return works – You can return at any point in the function; the

function will just stop executing at that point.

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 13

HW 2-3

• testRemovePunctuation() – What is this testing thing all about?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 14

HW 2-3

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 15

def testRemovePunctuation(): return True # All the tests must have passed!

HW 2-3

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 16

def testRemovePunctuation(): if removePunctuation(‘foo!’) != ???? : return True # All the tests must have passed!

I know what this should look like after removing the punctuation

This is the output I expect

HW 2-3

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 17

def testRemovePunctuation(): if removePunctuation(‘foo!’) != ‘foo ‘: return False return True # All the tests must have passed!

HW 2-3

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 18

def testRemovePunctuation(): if removePunctuation(‘foo!’) != ‘foo ‘: return False if removePunctuation(‘(hello.?)’ != ‘ hello ‘: return False return True # All the tests must have passed!

HW 2-3

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 19

def testRemovePunctuation(): if removePunctuation(‘foo!’) != ‘foo ‘: return False if removePunctuation(‘(hello.?)’ != ‘ hello ‘: return False <another test here!> return True # All the tests must have passed!

Reminders

• Don’t forget the Homework Policy you signed – You can only discuss problems with others, not

copy code, and you must add a comment saying who helped you.

– The CS department enforces this strictly.

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 20

The Big Picture

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 21

Overall Goal Build a Concordance of a text

• Locations of words • Frequency of words

Today: Get Word Frequencies • Define the inputs and the outputs • Learn a new data structure • Write a function to get word frequencies • Go from word frequencies to a concordance (finally!)

Word Frequency: Inputs and Outputs

I want to write a wordFreq function

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 22

The cat had a hat. The cat sat on the hat.

Word Frequency: Inputs and Outputs

I want to write a wordFreq function

• What is the input to wordFreq?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 23

The cat had a hat. The cat sat on the hat.

Word Frequency: Inputs and Outputs

I want to write a wordFreq function

• What is the input to wordFreq? • What is the output of wordFreq?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 24

The cat had a hat. The cat sat on the hat.

Word Frequency: Inputs and Outputs

I want to write a wordFreq function

• What is the input to wordFreq? • What is the output of wordFreq?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 25

The cat had a hat. The cat sat on the hat.

Word Freq.

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

Word Frequency: Inputs and Outputs

I want to write a wordFreq function

• What is the input to wordFreq? • What is the output of wordFreq? • We could do this with a list. How?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 26

The cat had a hat. The cat sat on the hat.

Word Freq.

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

The Big Picture

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 27

Overall Goal Build a Concordance of a text

• Locations of words • Frequency of words

Today: Get Word Frequencies • Define the inputs and the outputs • Learn a new data structure • Write a function to get word frequencies • Go from word frequencies to a concordance (finally!)

A New Data Structure

• A Data Structure is simply a way to store information. – Lists are a type of data structure

• We can have lists of integers, floats, strings, booleans, or any combination.

• Organized linearly (indexed by a range of integers)

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 28

A New Data Structure

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 29

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

A New Data Structure

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 30

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

Associate each word with the frequency.

A New Data Structure

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 31

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

Associate each word with the frequency.

Keys Values

A New Data Structure

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 32

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

Associate each word with the frequency.

Keys Values

Key-Value Pairs Key Value

‘the’ 3

‘cat’ 2

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 33

Key Type Value Type Example Key Example Value

Keys can be almost any type or data structure. Values can be any type or data structure.

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 34

Key Type Value Type Example Key Example Value String Integer 'the' 3

String Integer 'cat' 2

Keys can be almost any type or data structure. Values can be any type or data structure.

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 35

Key Type Value Type Example Key Example Value String Integer 'the' 3

String Integer 'cat' 2

String String 'Geisel' '078-05-1120'

String String 'Whitcher' '552-38-5014'

Keys can be almost any type or data structure. Values can be any type or data structure.

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 36

Key Type Value Type Example Key Example Value String Integer 'the' 3

String Integer 'cat' 2

String String 'Geisel' '078-05-1120'

String String 'Whitcher' '552-38-5014'

Float String 1.0 'one point oh'

Float String 2.8 'two point eight'

Keys can be almost any type or data structure. Values can be any type or data structure.

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 37

Key Type Value Type Example Key Example Value String Integer 'the' 3

String Integer 'cat' 2

String String 'Geisel' '078-05-1120'

String String 'Whitcher' '552-38-5014'

Float String 1.0 'one point oh'

Float String 2.8 'two point eight'

Integer List 1638 [2, 3, 3, 7, 13]

Keys can be almost any type or data structure. Values can be any type or data structure.

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 38

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

>>> freq = {} >>> freq {} >>>

Initialize a Dictionary

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 39

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

>>> freq = {} >>> freq {} >>> freq['the'] = 3 >>> freq {'the': 3} >>>

Initialize a Dictionary

Key = ‘the’ Value = 3

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 40

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

>>> freq = {} >>> freq {} >>> freq['the'] = 3 >>> freq {'the': 3} >>> freq['cat'] = 2 >>> freq {'the': 3, 'cat': 2} >>>

Initialize a Dictionary

Key = ‘the’ Value = 3

Key = ‘cat’ Value = 2

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 41

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

>>> freq2 = {'the':3,'cat':2} >>> freq2 {'the': 3, 'cat': 2} >>>

Initialize a dictionary with two key-value pairs

A New Data Structure: Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 42

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

>>> freq2 = {'the':3,'cat':2} >>> freq2 {'the': 3, 'cat': 2} >>> >>> freq2['cat'] 2 >>> freq2['the'] 3

Retrieve a value using the key

Redefining things in the dictionary

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 43

The cat had a hat. The cat sat on the hat.

Word Frequency

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

>>> freq2 = {'the':3,'cat':2} >>> freq2 {'the': 3, 'cat': 2} >>> >>> freq2['cat'] = 7 >>> freq2['a'] = freq2['a']+1

Assign a new value to a key!

7

2

The Big Picture

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 44

Overall Goal Build a Concordance of a text

• Locations of words • Frequency of words

Today: Get Word Frequencies • Define the inputs and the outputs • Learn a new data structure • Write a function to get word frequencies • Go from word frequencies to a concordance (finally!)

Python Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 45

Function (All operate on Dictionaries)

Input Output Example

keys() None List of keys

>>> freq2.keys() ['the', 'cat']

values() None List of values

>>> freq2.values() [3, 2]

has_key(<key>) Key Boolean >>> freq2.has_key('missing') False

<key> in <dict> (means same as above)

>>> 'the' in freq2 True

del(<dict>[<key>]) Dict. Entry

None >>> del(freq2['cat'])

• Keys Are Unique! • Assigning/getting any value is very fast

Python Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 46

Function (All operate on Dictionaries)

Input Output Example

keys() None List of keys

>>> freq2.keys() ['the', 'cat']

values() None List of values

>>> freq2.values() [3, 2]

has_key(<key>) Key Boolean >>> freq2.has_key('missing') False

<key> in <dict> (means same as above)

>>> 'the' in freq2 True

del(<dict>[<key>]) Dict. Entry

None >>> del(freq2['cat'])

Break

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 47

http://xkcd.com/1007/

The Big Picture

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 48

Overall Goal Build a Concordance of a text

• Locations of words • Frequency of words

Today: Get Word Frequencies • Define the inputs and the outputs • Learn a new data structure • Write a function to get word frequencies • Go from word frequencies to a concordance (finally!)

Python Dictionaries

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 49

Function (All operate on Dictionaries)

Input Output Example

keys() None List of keys

>>> freq2.keys() ['the', 'cat']

values() None List of values

>>> freq2.values() [3, 2]

has_key(<key>) Key True or False

>>> freq2.has_key('missing') False

<key> in <dict> (means same as above)

>>> 'the' in freq2 True

del(<dict>[<key>]) Dict. Entry

None >>> del(freq2[‘cat'])

Python Dictionaries

I want to write a wordFreq function

• What is the input to wordFreq? • What is the output of wordFreq?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 50

The cat had a hat. The cat sat on the hat.

Word Freq.

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

Python Dictionaries

I want to write a wordFreq function

• What is the input to wordFreq? • What is the output of wordFreq?

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 51

The cat had a hat. The cat sat on the hat.

Word Freq.

the 3

cat 2

had 1

a 1

hat 2

sat 1

on 1

The Big Picture

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 52

Overall Goal Build a Concordance of a text

• Locations of words • Frequency of words

Today: Get Word Frequencies • Define the inputs and the outputs • Learn a new data structure • Write a function to get word frequencies • Go from word frequencies to a concordance (finally!)

Building a Concordance

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 53

The cat had a hat. The cat sat on the hat. 0 1 2 3 4 5 6 7 8 9 10

Word List of Positions Frequency

the [0,5,9] 3

cat [1,6] 2

had [2] 1

a [3] 1

hat [4,10] 2

sat [7] 1

on [8] 1

The Big Picture

CSCI 0931 - Intro. to Comp. for the Humanities and Social Sciences 54

Overall Goal Build a Concordance of a text

• Locations of words • Frequency of words

Today: Get Word Frequencies • Define the inputs and the outputs • Learn a new data structure • Write a function to get word frequencies • Go from word frequencies to a concordance (finally!)

This will be part of your next HW