Python Dictionaries

This guide discusses using Pythons's Dictionary object.

Overview

One of the nice features of other scripting languages, such as Perl, LISP, and Python is what is called an associative array. An associative array differs from a “normal” array in one major respect: rather than being indexed numerically (i.e. 0, 1, 2, 3, …), it is indexed by a key, or an English-like word. Python has something very similar to an associative array in the Dictionary object. The Python Dictionary object provides an key:value indexing facility. Note that dictionaries are unordered - since the values in the dictionary are indexed by keys, they are not held in any particular order, unlike a list, where each item can be located by its position in the list.

The Dictionary object is used to hold a set of data values in the form of (key, item) pairs. A dictionary is sometimes called an associative array because it associates a key with an item. The keys behave in a way similar to indices in an array, except that array indices are numeric and keys are arbitrary strings. Each key in a single Dictionary object must be unique.

Dictionaries are frequently used when some items need to be stored and recovered by name. For example, a dictionary can hold all the environment variables defined by the system or all the values associated with a registry key. While this can be much faster than iterating a list looking for a match, a dictionary can only store one item for each key value. That is, dictionary keys must all be unique.

Creating Dictionaries

To create an empty dictionary, use a pair of braces {}

room_empty = {}

To construct an instance of a dictionary object with data, that is, key:item pairs filled in, use one of the following methods.

The dictionary room_num is created and filled in with each key:value pair, rather than as an empty dictionary. The key is a string or number, in the example below it is a person’s name, followed be a colon : as a separator from the associated value which can be any datatype, in this case an integer. Commas , sperate different key:value pairs in the dictionary:

room_num = {'john': 425, 'tom': 212, 'sally':325}

This dictionary is created from a list of tuples using the dict key word:

room_num1 = dict([('john', 425), ('tom', 212), ('sally', 325)])

The dictkeyword can be used in other ways to construct dictionaries.

Adding Values

To add a value to a Dictionary, specify the new key and set a value. Below, the code creates the dictionary room_num with two key:value pairs for John and Liz, then adds a third one for Isaac:

room_num = {'John': 425, 'Liz': 212}
room_num['Isaac'] = 345
print room_num

There is no limit to the number of values that can be added to a dictionary (within the bounds of physical memory).

Changing a value for any of the keys follows the same syntax. If the key already exists in the dictionary, the value is simply updated.

Removing Values

To remove a value from a dictionary, use the del method and specify the key to remove:

room_num = {'John': 425, 'Liz': 212, 'Isaac': 345}
del room_num['Isaac']
print room_num

Counting Values

Use the len() property to obtain a count of values in the dictionary.

room_num = {'John': 425, 'Liz': 212, 'Isaac': 345}
print len(room_num)

Get Values for Key

The in syntax returns True if the specified key exists within the dictionary. For example you may want to know if Tom is included in a dictionary, in this case False:

room_num = {'John': 425, 'Liz': 212, 'Isaac': 345}
var1 = 'Tom' in room_num
print "Is Tom in the dictionary? " + str(var1)

or you may want to know if an Isaac is not in the dictionary. Below the answer will be also be False:

room_num = {'John': 425, 'Liz': 212, 'Isaac': 345}
var1 = 'Isaac' not in room_num
print "Is Isaac not in room_num? " + str(var1)

Use the variable name and the key value in brackets [] to get the value associated with the key.

room_num = {'John': 425, 'Liz': 212, 'Isaac': 345}
var1 = room_num['Isaac']
print "Isaac is in room number " + str(var1)

The .keys() and .values() methods return an array containing all the keys or values from the dictionary. For example:

room_num = {'john': 425, 'tom': 212}
print (room_num.keys())
print (room_num.values())

Looping through Dictionaries

Dictionaires can be used to control loops. In addition both the keys and values can be extracted at the same time using the .items() method:

room_num = {'john': 425, 'tom': 212, 'isaac': 345}
for k, v in room_num.items():
    print k + ' is in room ' + str(v)

You can also go through the dictionary backwards by using the reversed() method:

room_num = {'john': 425, 'tom': 212, 'isaac': 345}
for k, v in reversed(room_num.items()):
    print k + ' is in room ' + str(v)

Sorting Dictionaries

On occasion, it may be important to sort your dictionary. Dictionaries and be sorted by key name or by values

To sort a dictionary by key using the following sorted() function:

room_num = {'john': 425, 'tom': 212, 'isaac': 345}
print sorted(room_num)

To sort by values use the sorted() method along with the .values() function:

room_num = {'john': 425, 'tom': 212, 'isaac': 345}
print sorted(room_num.values())

The Dictionary object is not there to replace list iteration, but there are certainly times when it makes more sense to index your array using English-like terms as opposed to numerical values. It can be much faster to locate an object in a dictionary then in a list.