|
7.4 Dictionaries
Another useful data type built into Python is the dictionary.
Dictionaries are sometimes found in other languages as "associative
arrays" or "hashes". Unlike sequences, which are
indexed by a range of numbers, dictionaries are indexed by keys,
which can be any immutable type; strings and numbers can always be
keys. Tuples can be used as keys if they contain only strings,
numbers, or tuples; if a tuple contains any mutable object either
directly or indirectly, it cannot be used as a key. You can't use
lists as keys, since lists can be modified in place using their
append() and extend() methods, as well as slice and
indexed assignments.
It is best to think of a dictionary as an unordered set of
key: value pairs, with the requirement that the keys are unique
(within one dictionary).
A pair of braces creates an empty dictionary: {} .
Placing a comma-separated list of key:value pairs within the
braces adds initial key:value pairs to the dictionary; this is also the
way dictionaries are written on output.
The main operations on a dictionary are storing a value with some key
and extracting the value given the key. It is also possible to delete
a key:value pair
with del .
If you store using a key that is already in use, the old value
associated with that key is forgotten. It is an error to extract a
value using a non-existent key.
The keys() method of a dictionary object returns a list of all
the keys used in the dictionary, in random order (if you want it
sorted, just apply the sort() method to the list of keys). To
check whether a single key is in the dictionary, use the
has_key() method of the dictionary.
Here is a small example using a dictionary:
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> tel.keys()
['guido', 'irv', 'jack']
>>> tel.has_key('guido')
1
The dict() constructor builds dictionaries directly from
lists of key-value pairs stored as tuples. When the pairs form a
pattern, list comprehensions can compactly specify the key-value list.
>>> dict([('sape', 39), ('guido', 27), ('jack', 98)])
{'sape': 39, 'jack': 98, 'guido': 27}
>>> dict([(x, x**2) for x in vec]) # list comprehension
{2: 4, 4: 16, 6: 36}
|
|