19
9 Dictionaries © 2010 David A Watt, University of Glasgow Accelerated Programming 2 Part I: Python Programming 1

9 Dictionaries © 2010 David A Watt, University of Glasgow Accelerated Programming 2 Part I: Python Programming 1

Embed Size (px)

Citation preview

9Dictionaries

© 2010 David A Watt, University of Glasgow

Accelerated Programming 2

Part I: Python Programming

1

9-2

Dictionaries (1)

A dictionary is a set of (key, value) entries, such that no two entries contain the same key.

The entries are in no particular order, so a dictionary is not a sequence.

Each key must be of immutable type (e.g., a number, string, or tuple).

Each value may be of any type.

9-3

Dictionaries (2)

A dictionary may be:

– homogeneous (all keys are of the same type, and all values are of the same type); or

– heterogeneous (keys and/or values are of mixed types).

9-4

Dictionaries (3)

The following expression constructs an empty dictionary:

{ }

The following expression constructs a non-empty dictionary:

{ k1 : v1 , …, kn : vn }

where each ki is a key and each vi is a value.

9-5

Dictionaries (4)

The following expression indexes a dictionary d:

d [ k ]

where k is a key.

This yields the value from the entry with key k. It fails if d contains no such entry.

The following statement updates a dictionary d:

d [ k ] = v

where k is a key and v is a value.

This adds a new entry (k, v) to d. If there is an existing entry with key k, it is replaced.

9-6

Example: dictionary of Roman numerals

Constructing a (homogeneous) dictionary of Roman numerals and their values:

roman = {'I': 1, 'V': 5, 'X': 10}

Tabular view:

roman

‘I’ 1

‘V’ 5

‘X’ 10

keys values

Indexing the dictionary:

roman['I'] yields 1roman['X'] yields 10

9-7

Example: dictionary of currencies (1)

Constructing a (homogeneous) dictionary of EU countries and their currencies:

currency = \{'UK': 'pound', 'FR': 'euro', 'DE': 'euro'}

Tabular view:

currency

‘UK’ ‘pound’

‘FR’ ‘euro’

‘DE’ ‘euro’

keys values

9-8

Example: dictionary of currencies (2)

Indexing the dictionary:

currency['UK'] yields ‘pound’currency['FR'] yields ‘euro’

Updating an entry:

currency['UK'] = 'euro' – UK joins the eurozone

Adding an entry:

currency['IS'] = 'euro' – Iceland joins the EU

Removing an entry:

del currency['IS'] – Iceland leaves again

9-9

Testing a dictionary

The expression “d.has_key(k)” yields True iff key k is present in dictionary d. E.g.:

currency.has_key('UK') – yields True

currency.has_key('US') – yields False

9-10

Traversing a dictionary

The expression “d.keys()” yields a list of all the keys in dictionary d. E.g.:

currency.keys() – yields [‘UK’, ‘FR’, ‘DE’]

Note that the keys are in no particular order.

To traverse a dictionary, iterate over its keys (e.g., using a for-statement), and use each key to index the dictionary.

9-11

Example: printing a dictionary (1)

We can simply print a dictionary:

print currency

Output:

{'UK': 'pound', 'FR': 'euro', 'DE': 'euro'}

9-12

Example: printing a dictionary (1)

To print a dictionary in tabular format:

print 'Country', '\t', 'Currency'for country in currency.keys(): print country, '\t', currency[country]

Output:

Country CurrencyUK poundFR euroDE euro

9-13

Example: student records (1)

Consider the set of student records for a particular course (such as AP2).

For simplicity, assume that each student record consists of:

– a student’s id (which is unique)

– the student’s name

– the student’s grade.

9-14

Example: student records (2)

We can model the set of student records as a dictionary.

In each dictionary entry:

– the key part will be a student id;

– the value part will be a (name, grade) pair.

9-15

Example: student records (3)

Function to enrol a student:

def enrol (records, id, name): # Add a new student record (with no grade). # to records. if records.has_key(id): print 'Student ' + id + \ ' already enrolled!' else: records[id] = (name, ' ')

9-16

Example: student records (4)

Function to award a grade to a student:

def award (records, id, grade): # Add a grade to a student record in records. if records.has_key(id): (name, old_grade) = records[id] records[id] = (name, grade) else: print 'Student ' + id + \ ' not enrolled!'

9-17

Example: student records (5)

Function to retrieve a student’s grade:

def course_grade (records, id): # Return the grade of student id in records. if records.has_key(id): (name, grade) = records[id] return grade else: print 'Student ' + id + \ ' not enrolled!' return '??'

9-18

Example: student records (6)

Function to withdraw a student:

def withdraw (records, id): # Remove a student record from records. if records.has_key(id): del records[id] else: print 'Student ' + id + \ ' not enrolled!'

9-19

Example: student records (7)

Function to tabulate the student records:

def tabulate (records): # Tabulate the student records in records. print 'Id', '\t', 'Name', '\t', 'Grade' for id in records.keys(): (name, grade) = records[id] print id + '\t' + name \ + '\t' + grade