Dictionaries
============
Another useful data type built into Python is the _dictionary_.
Dictionaries are sometimes found in other languages as "associative
memories" or "associative arrays". 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