Section 10.1 Dictionaries
A
dictionary is like a list, but more general. In a list, the index positions have to be integers; in a dictionary, the indices can be (almost) any type.
You can think of a dictionary as a mapping between a set of indices (which are called
keys) and a set of values. Each key maps to a value. The association of a key and a value is called a
key-value pair or sometimes an
item.
As an example, weโll build a dictionary that maps from English to Spanish words, so the keys and the values are all strings.
The function
dict creates a new dictionary with no items. Because
dict is the name of a built-in function, you should avoid using it as a variable name.
The curly brackets,
{}, represent an empty dictionary. To add items to the dictionary, you can use square brackets:
>>> eng2sp['one'] = 'uno'
Activity 10.1.1.
Write code that adds the key โtwoโ with a value of โdosโ to the dictionary eng2sp.
This line creates an item that maps from the key
'one' to the value โunoโ. If we print the dictionary again, we see a key-value pair with a colon between the key and value:
eng2sp = {'one':'uno'}
print(eng2sp)
{'one':'uno'}
This output format is also an input format. For example, you can create a new dictionary with three items. But if you print
eng2sp, you might be surprised:
The order of the key-value pairs is not the same. In fact, if you type the same example on your computer, you might get a different result. In general, the order of items in a dictionary is unpredictable.
But thatโs not a problem because the elements of a dictionary are never indexed with integer indices. Instead, you use the keys to look up the corresponding values:
>>> print(eng2sp['two'])
'dos'
The key
'two' always maps to the value โdosโ so the order of the items doesnโt matter.
If the key isnโt in the dictionary, you get an exception:
>>> print(eng2sp['four'])
KeyError: 'four'
The
len function works on dictionaries; it returns the number of key-value pairs:
The
in operator works on dictionaries; it tells you whether something appears as a
key in the dictionary (appearing as a value is not good enough).
>>> 'one' in eng2sp
True
>>> 'uno' in eng2sp
False
Activity 10.1.2.
What is printed after the following code is run?
pokemon_name_n_type = {'Squirtle': 'Water', 'Charmander': 'Fire', 'Bulbasaur' : 'Grass'}
print('Water' in pokemon_name_n_type)
-
True
-
Try again! Remember that the in operator returns true if the value is a key in the dictionary.
-
False
-
Correct! โWaterโ is a value in the dictionary, therefore the in operator will not be able to determine if this is in the dictionary.
To see whether something appears as a value in a dictionary, you can use the method
values, which returns the values as a list, and then use the
in operator:
>>> vals = list(eng2sp.values())
>>> 'uno' in vals
True
The
in operator uses different algorithms for lists and dictionaries. For lists, it uses a linear search algorithm. As the list gets longer, the search time gets longer in direct proportion to the length of the list. For dictionaries, Python uses an algorithm called a
hash table that has a remarkable property: the
in operator takes about the same amount of time no matter how many items there are in a dictionary. I wonโt explain why hash functions are so magical, but you can read more about it at
wikipedia.org/wiki/Hash_table.
Activity 10.1.3.
What is the value of fruits[โapplesโ] when the code finishes running?
fruits = {'apples': 1, 'bananas': 4, 'pears': 17, 'oranges': 14}
fruits['apples'] += fruits['bananas']
-
1
-
Try again! This is only the original amount of apples (1), but it must be increased by the amount of bananas (4)
-
4
-
Try again! This is only the amount of bananas (4), but we must add this to the number of apples (1).
-
5
-
Correct! The original amount of apples (1) is increased by the amount of bananas (4) to result in 5 apples.
You have attempted
of
activities on this page.