Dictionaries#

Learning Objectives#

At the end of this lesson you will be able to:

  • Identify and explain what a dictionary is.

  • Explain what makes a dictionary different to a list.

  • Understand the key: value relationship.

  • Create a dictionary containing simple values.

  • Update values in a dictionary.

Key points#

  • “A dictionary stores key-value pairs.”

  • “Dictionaries preserve insertion order in Python 3.7+; they are not automatically sorted by key.”

  • “Dictionaries are mutable.”

Introduction#

Lists and arrays are useful, but don’t cover every use case. One of Python’s best features is its “dictionary” data structure. Whereas a list or array is simply a collection of elements, a dictionary supports key-value storage of data. Put into plain english, it lets you store and retrieve data values by name.

In modern Python, dictionaries remember the order in which keys were inserted. This is different from sorting the keys alphabetically or numerically. For example:

example = {'b': 1, 'a': 2}
list(example)

This gives ['b', 'a'], because the key 'b' was inserted before 'a'. The order is predictable, but it is insertion order, not sorted order.

Create a dictionary#

Let’s create and use a simple dictionary of scientist’s birth years to illustrate this:

birth_years = {'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833}
print(birth_years)
{'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833}

Here, ‘Newton’, ‘Darwin’, ‘Einstein’ and ‘Nobel’ are keys, and the years are values. Keys and values form a pairwise mapping, allowing the retrieval of a value via the value’s key. We can retrieve a value from a dictionary by entering the correct key for this value. We do this using the following syntax:

value_we_want = dictionary[‘key_of_value_we_want’]

This is similar to accessing a value stored in a list. However, the key does not have to be an integer.

Retrieve a value#

Retrieve the birth year for Isaac Newton from the dictionary of birth years.


Altering a dictionary#

Similar to lists, dictionaries are mutable. We can add a value to a dictionary, using a key:

birth_years = {'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833}
birth_years['Turing'] = 1612
print(birth_years)
{'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833, 'Turing': 1612}

Oops, we made a mistake there. Turing was actually born in 1912. We can update a value using a key. Turing’s birthdate above is actually incorrect. Values may be overwritten by re-assignment:

birth_years = {'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833, 'Turing': 1612}
birth_years['Turing'] = 1912
print(birth_years)
{'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833, 'Turing': 1912}

Add your own scientists to a dictionary#

Add two more scientist’s birth years to our dictionary of birth years.


Retrieve all keys and values#

Dictionaries contain a number of in-built methods that allow you to easily access the data contained within. These methods are automatically attached to every dictionary.

birth_years = {'Newton': 1642, 'Darwin': 1809, 'Einstein': 1979, 'Nobel': 1833, 'Turing': 1612, 'Curie': 1867, 'Franklin': 1920}
birth_years.keys()
dict_keys(['Newton', 'Darwin', 'Einstein', 'Nobel', 'Turing', 'Curie', 'Franklin'])

Similarly for values:

birth_years.values()
dict_values([1642, 1809, 1979, 1833, 1612, 1867, 1920])

We can convert these to lists:

list(birth_years.values())
[1642, 1809, 1979, 1833, 1612, 1867, 1920]

And finally, retrieve the key, value pairs together, forming a list of tuples:

list(birth_years.items())
[('Newton', 1642),
 ('Darwin', 1809),
 ('Einstein', 1979),
 ('Nobel', 1833),
 ('Turing', 1612),
 ('Curie', 1867),
 ('Franklin', 1920)]

Summary Quiz#