Skip to main content

Python Dictionary Comprehension

Python Dictionaries are data types in Python which allows us to store data in key/value pair.

This chapter will discuss the Dictionary Comprehension.

What is Dictionary Comprehension in Python?​

Dictionary comprehension is an elegant and concise way to create dictionaries.

For example, create a dictionary with number-cube key/value pair.

cube_dict = dict()
for num in range(1, 11):
cube_dict[num] = num*num*num
print(cube_dict)

Now, create the dictionary in the previous program using dictionary comprehension.

cube_dict = {num: num*num*num for num in range(1, 11)}
print(cube_dict)

The output of both programs is the same:

{1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000}
note

The use of dictionary comprehension allowed us to create a dictionary in one line.

How to use Dictionary Comprehension​

The syntax for dictionary comprehension is:

dictionary = {key: value for vars in iterable}

where:

  • key is the key of the dictionary record
  • value is the value associated to the key
  • vars are the variables used during iteration of the iterable object
  • iterable is an object which can be iterated

For example, create a new dictionary with data from another dictionary:

#item price in euros
old_price = {'pizza': 5.90, 'coffee': 1.5, 'beefsteack': 12.50}

euro_to_pound = 0.86
new_price = {item: value*euro_to_pound for (item, value) in old_price.items()}
print(new_price)

Output:

{'pizza': 5.074, 'coffee': 1.29, 'beefsteack': 10.75}

Conditionals in Dictionary Comprehension​

You can add one or more conditions to the Dictionary Comprehension.

If Conditional Dictionary Comprehension​

Example with only one if in the Dictionary Comprehension:

my_dict = {'Tom': 23, 'Ryan': 12, 'Madison': 57, 'John': 56}

even_dict = {k: v for (k, v) in my_dict.items() if v % 2 == 0}
print(even_dict) # {'Ryan': 12, 'John': 56}
note

Only even elements were added because of the if clause in the dictionary comprehension.

Multiple if Conditional Dictionary Comprehension​

Example with multiple if in the Dictionary Comprehension where only the items with an odd value of less than 40 are added to the new dictionary:

my_dict = {'Tom': 23, 'Ryan': 12, 'Madison': 57, 'John': 56}

new_dict = {k: v for (k, v) in my_dict.items() if v % 2 != 0 if v < 40}
print(new_dict) # {'Tom': 23}
note

Multiple if in the Dictionary Comprehension are equivalent to and operation where both conditions have to be true.

if-else Conditional Dictionary Comprehension​

Example with if-else in the Dictionary Comprehension where the items with a value of 40 or more have the value of 'old' while others have the value of 'young'.

my_dict = {'Tom': 23, 'Ryan': 12, 'Madison': 57, 'John': 56}

new_dict = {k: ('old' if v > 40 else 'young')
for (k, v) in my_dict.items()}
print(new_dict) # {'Tom': 'young', 'Ryan': 'young', 'Madison': 'old', 'John': 'old'}
note

if-else in the Dictionary Comprehension are equivalent to if-else flow control.

Nested Dictionary Comprehension​

Nested dictionaries can be created adding dictionary comprehensions to dictionary comprehensions.

For example, create a multiplication table in a nested dictionary, for numbers from 2 to 4.

dictionary = {
k1: {k2: k1 * k2 for k2 in range(1, 6)} for k1 in range(2, 5)
}
print(dictionary)

Output

{2: {1: 2, 2: 4, 3: 6, 4: 8, 5: 10},
3: {1: 3, 2: 6, 3: 9, 4: 12, 5: 15},
4: {1: 4, 2: 8, 3: 12, 4: 16, 5: 20}}

The above code is equivalent to:

dictionary = dict()
for k1 in range(11, 16):
dictionary[k1] = {k2: k1*k2 for k2 in range(1, 6)}
print(dictionary)

and equivalent to:

dictionary = dict()
for k1 in range(11, 16):
dictionary[k1] = dict()
for k2 in range(1, 6):
dictionary[k1][k2] = k1*k2
print(dictionary)

Advantages of Using Dictionary Comprehension​

  • Dictionary comprehension greatly shortens the process of initializing dictionaries.
  • Dictionary comprehension reduces lines of code while keeping the logic intact.

Disadvantages of Using Dictionary Comprehension​

Dictionary comprehensions aren't always the right choice, because:

  • They can sometimes make the code run slower and consume more memory.
  • They can decrease the readability of the code.