Python Dictionaries

In Python, a dictionary is an ordered (from Python > 3.7) collection of key: value pairs.

From the Python 3 documentation

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.

Example Dictionary:

# Dictionary: collection of key-value pairs
my_cat = {
    'size': 'fat',          # key: 'size', value: 'fat'
    'color': 'gray',         # key: 'color', value: 'gray'
    'disposition': 'loud'    # key: 'disposition', value: 'loud'
}

Set key, value using subscript operator []

# Add or update dictionary entry using subscript operator
my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
my_cat['age_years'] = 2  # Add new key-value pair
print(my_cat)
{'size': 'fat', 'color': 'gray', 'disposition': 'loud', 'age_years': 2}

Get value using subscript operator []

In case the key is not present in dictionary KeyError is raised.

my_cat = {
 'size': 'fat',
 'color': 'gray',
 'disposition': 'loud',
}
print(my_cat['size'])
fat
print(my_cat['eye_color'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'eye_color'

values()

The values() method gets the values of the dictionary:

# Iterate over dictionary values using .values() method
pet = {'color': 'red', 'age': 42}
for value in pet.values():  # Loop through all values
    print(value)
red
42

keys()

The keys() method gets the keys of the dictionary:

# Iterate over dictionary keys using .keys() method
pet = {'color': 'red', 'age': 42}
for key in pet.keys():  # Loop through all keys
    print(key)
color
age

There is no need to use .keys() since by default you will loop through keys:

# Iterating over dictionary directly loops through keys (default behavior)
pet = {'color': 'red', 'age': 42}
for key in pet:  # Equivalent to for key in pet.keys()
    print(key)
color
age

items()

The items() method gets the items of a dictionary and returns them as a Tuple:

pet = {'color': 'red', 'age': 42}
for item in pet.items():
    print(item)
('color', 'red')
('age', 42)

Using the keys(), values(), and items() methods, a for loop can iterate over the keys, values, or key-value pairs in a dictionary, respectively.

# Iterate over key-value pairs using .items() method
pet = {'color': 'red', 'age': 42}
for key, value in pet.items():  # Unpack tuple into key and value
    print(f'Key: {key} Value: {value}')
Key: color Value: red
Key: age Value: 42

get()

The get() method returns the value of an item with the given key. If the key doesn’t exist, it returns None:

# .get() method: safely retrieve value, returns None if key doesn't exist
wife = {'name': 'Rose', 'age': 33}

f'My wife name is {wife.get("name")}'  # Returns 'Rose'
'My wife name is Rose'
f'She is {wife.get("age")} years old.'
'She is 33 years old.'
f'She is deeply in love with {wife.get("husband")}'
'She is deeply in love with None'

You can also change the default None value to one of your choice:

wife = {'name': 'Rose', 'age': 33}

f'She is deeply in love with {wife.get("husband", "lover")}'
'She is deeply in love with lover'

Adding items with setdefault()

It’s possible to add an item to a dictionary in this way:

wife = {'name': 'Rose', 'age': 33}
if 'has_hair' not in wife:
    wife['has_hair'] = True

Using the setdefault method, we can make the same code more short:

wife = {'name': 'Rose', 'age': 33}
wife.setdefault('has_hair', True)
wife
{'name': 'Rose', 'age': 33, 'has_hair': True}

Removing Items

pop()

The pop() method removes and returns an item based on a given key.

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.pop('age')
33
wife
{'name': 'Rose', 'hair': 'brown'}
Quiz

Sign in to answer this quiz and track your learning progress

What does pop() do when called on a dictionary?
A. Only removes the key-value pair
B. Removes and returns the value for the specified key
C. Only returns the value without removing it
D. Removes all items from the dictionary

popitem()

The popitem() method removes the last item in a dictionary and returns it.

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.popitem()
('hair', 'brown')
wife
{'name': 'Rose', 'age': 33}

del

The del method removes an item based on a given key.

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
del wife['age']
wife
{'name': 'Rose', 'hair': 'brown'}

clear()

Theclear() method removes all the items in a dictionary.

wife = {'name': 'Rose', 'age': 33, 'hair': 'brown'}
wife.clear()
wife
{}

Checking keys in a Dictionary

person = {'name': 'Rose', 'age': 33}

'name' in person.keys()
True
'height' in person.keys()
False
'skin' in person # You can omit keys()
False

Checking values in a Dictionary

person = {'name': 'Rose', 'age': 33}

'Rose' in person.values()
True
33 in person.values()
True

Pretty Printing

import pprint

wife = {'name': 'Rose', 'age': 33, 'has_hair': True, 'hair_color': 'brown', 'height': 1.6, 'eye_color': 'brown'}
pprint.pprint(wife)
{'age': 33,
 'eye_color': 'brown',
 'hair_color': 'brown',
 'has_hair': True,
 'height': 1.6,
 'name': 'Rose'}

Merge two dictionaries

For Python 3.5+:

dict_a = {'a': 1, 'b': 2}
dict_b = {'b': 3, 'c': 4}
dict_c = {**dict_b, **dict_a}
dict_c
{'a': 1, 'b': 3, 'c': 4}
Quiz

Sign in to answer this quiz and track your learning progress

When merging two dictionaries using {**dict_b, **dict_a}, what happens if both dictionaries have the same key?
A. The value from dict_b overwrites the value from dict_a
B. The value from dict_a overwrites the value from dict_b
C. Both values are kept in a list
D. An error is raised