Skip to content

Iterating Through Python Dictionary: Effortlessly Extract Values & Keys

[

How to Iterate Through a Dictionary in Python

Dictionaries are one of the most important and useful built-in data structures in Python. They are everywhere and are a fundamental part of the language itself. In your code, you’ll use dictionaries to solve many programming problems that may require iterating through the dictionary at hand. In this tutorial, we will dive deep into how to iterate through a dictionary in Python.

Getting Started With Python Dictionaries

Before we begin iterating through a dictionary, let’s first understand the basics of dictionaries in Python. Dictionaries are mutable data structures that store key-value pairs. Each key is unique within a dictionary, and it provides a way to retrieve the corresponding value. Here’s an example of a dictionary:

person = {"name": "John", "age": 30, "country": "USA"}

In this case, the keys are “name”, “age”, and “country”, and the corresponding values are “John”, 30, and “USA” respectively.

To access the value of a specific key in a dictionary, you can use square brackets and the key name:

print(person["name"]) # Output: John
print(person["age"]) # Output: 30
print(person["country"]) # Output: USA

Understanding How to Iterate Through a Dictionary in Python

Now that we have a basic understanding of dictionaries, let’s explore different ways to iterate through them.

Traversing a Dictionary Directly

One way to iterate through a dictionary is by traversing it directly. This means that we loop through the dictionary itself, not its keys or values. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key in person:
print(key, person[key])

Output:

name John
age 30
country USA

In this example, we use a for loop to iterate over the keys of the dictionary. Inside the loop, we access the value of each key using square brackets and the key name.

Looping Over Dictionary Items: The .items() Method

Another way to iterate through a dictionary is by using the .items() method. This method returns a view object that contains tuples of the dictionary’s key-value pairs. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key, value in person.items():
print(key, value)

Output:

name John
age 30
country USA

In this example, we use a for loop to iterate over the items of the dictionary. Inside the loop, we unpack each tuple into separate variables key and value.

Iterating Through Dictionary Keys: The .keys() Method

If you only need to iterate through the keys of a dictionary, you can use the .keys() method. This method returns a view object that contains the keys of the dictionary. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key in person.keys():
print(key)

Output:

name
age
country

In this example, we use a for loop to iterate over the keys of the dictionary obtained from the .keys() method.

Walking Through Dictionary Values: The .values() Method

If you only need to iterate through the values of a dictionary, you can use the .values() method. This method returns a view object that contains the values of the dictionary. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for value in person.values():
print(value)

Output:

John
30
USA

In this example, we use a for loop to iterate over the values of the dictionary obtained from the .values() method.

Changing Dictionary Values During Iteration

It is possible to change the values of a dictionary while iterating through it. However, you need to be careful when doing so, as this can lead to unexpected behavior. Modifying the dictionary’s structure, such as adding or removing keys, may result in a runtime error or undefined behavior. Therefore, it is generally recommended to avoid modifying a dictionary while iterating over it.

If you only need to update the values of a dictionary, you can iterate through the keys and update the values directly. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key in person:
person[key] = person[key].upper()
print(person)

Output:

{'name': 'JOHN', 'age': 30, 'country': 'USA'}

In this example, we iterate through the keys of the dictionary and update each value to its uppercase version using the .upper() method.

Safely Removing Items From a Dictionary During Iteration

If you need to remove items from a dictionary while iterating through it, you need to be cautious to avoid runtime errors. One way to safely remove items is by creating a separate list of keys to remove and then removing them outside the loop. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
keys_to_remove = []
for key, value in person.items():
if value == 30:
keys_to_remove.append(key)
for key in keys_to_remove:
del person[key]
print(person)

Output:

{'name': 'John', 'country': 'USA'}

In this example, we create a separate list keys_to_remove to store the keys that need to be removed. Inside the loop, we check if the value is equal to 30 and add the key to the keys_to_remove list. Then, outside the loop, we iterate through the keys_to_remove list and remove the corresponding keys from the dictionary.

Iterating Through Dictionaries: for Loop Examples

In addition to the methods mentioned above, you can also use for loops to perform more complex operations while iterating through dictionaries.

Filtering Items by Their Value

If you want to filter items in a dictionary based on their value, you can use a for loop and an if statement. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
filtered_person = {key: value for key, value in person.items() if value != 30}
print(filtered_person)

Output:

{'name': 'John', 'country': 'USA'}

In this example, we use a for loop and an if statement to filter out the key-value pairs where the value is equal to 30. We create a new dictionary filtered_person using a dictionary comprehension.

Running Calculations With Keys and Values

If you need to perform calculations using the keys and values of a dictionary, you can use a for loop to iterate through them. Here’s an example:

grades = {"John": 90, "Alice": 85, "Bob": 95}
total = 0
for name, grade in grades.items():
total += grade
average = total / len(grades)
print("Average grade:", average)

Output:

Average grade: 90.0

In this example, we use a for loop to iterate through the dictionary and calculate the total of the grades. Then, we divide the total by the number of grades to calculate the average.

Swapping Keys and Values Through Iteration

If you need to swap the keys and values of a dictionary, you can use a for loop and create a new dictionary. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
swapped_person = {value: key for key, value in person.items()}
print(swapped_person)

Output:

{'John': 'name', 30: 'age', 'USA': 'country'}

In this example, we iterate through the dictionary and create a new dictionary swapped_person where the keys are the original dictionary’s values and the values are the original dictionary’s keys.

Iterating Through Dictionaries: Comprehension Examples

Comprehensions provide a concise and efficient way to iterate through dictionaries and perform operations on the key-value pairs.

Filtering Items by Their Value: Revisited

We can use a dictionary comprehension to filter items in a dictionary based on their value. Here’s a revised version of the previous example:

person = {"name": "John", "age": 30, "country": "USA"}
filtered_person = {key: value for key, value in person.items() if value != 30}
print(filtered_person)

Output:

{'name': 'John', 'country': 'USA'}

In this example, we use a dictionary comprehension with an if statement to create a new dictionary filtered_person containing only the key-value pairs where the value is not equal to 30.

Swapping Keys and Values Through Iteration: Revisited

We can use a dictionary comprehension to swap the keys and values of a dictionary. Here’s a revised version of the previous example:

person = {"name": "John", "age": 30, "country": "USA"}
swapped_person = {value: key for key, value in person.items()}
print(swapped_person)

Output:

{'John': 'name', 30: 'age', 'USA': 'country'}

In this example, we use a dictionary comprehension to create a new dictionary swapped_person where the keys are the original dictionary’s values and the values are the original dictionary’s keys.

Traversing a Dictionary in Sorted and Reverse Order

By default, dictionaries in Python are unordered. However, you can iterate through a dictionary in a specific order by sorting its keys.

Iterating Over Sorted Keys

If you want to iterate over a dictionary’s keys in a sorted order, you can use the sorted() function and a for loop. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key in sorted(person.keys()):
print(key, person[key])

Output:

age 30
country USA
name John

In this example, we use the sorted() function to get a sorted list of the dictionary’s keys. Then, we iterate through the sorted list of keys and access the corresponding values using square brackets and the key name.

Looping Through Sorted Values

If you want to loop through a dictionary’s values in a sorted order, you can use the sorted() function and a for loop. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for value in sorted(person.values()):
print(value)

Output:

30
USA
John

In this example, we use the sorted() function to get a sorted list of the dictionary’s values. Then, we iterate through the sorted list of values and print each value.

Sorting a Dictionary With a Comprehension

If you want to create a new dictionary that is sorted by keys or values, you can use a dictionary comprehension with the sorted() function. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
sorted_person = {key: person[key] for key in sorted(person.keys())}
print(sorted_person)

Output:

{'age': 30, 'country': 'USA', 'name': 'John'}

In this example, we use a dictionary comprehension with the sorted() function to create a new dictionary sorted_person that is sorted by keys.

Iterating Through a Dictionary in Reverse-Sorted Order

If you want to iterate through a dictionary in reverse-sorted order, you can use the reversed() function and the sorted() function. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key in reversed(sorted(person.keys())):
print(key, person[key])

Output:

name John
country USA
age 30

In this example, we use the sorted() function to get a sorted list of the dictionary’s keys, and then we use the reversed() function to reverse the order of the keys. Finally, we iterate through the reversed list of keys and access the corresponding values using square brackets and the key name.

Traversing a Dictionary in Reverse Order

If you want to traverse a dictionary in reverse order, you can use the reversed() function and a for loop. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
for key in reversed(person):
print(key, person[key])

Output:

country USA
age 30
name John

In this example, we use the reversed() function to reverse the order of the keys in the dictionary. Then, we iterate through the reversed keys and access the corresponding values using square brackets and the key name.

Iterating Over a Dictionary Destructively With .popitem()

If you need to iterate over a dictionary and remove its items at the same time, you can use the .popitem() method. This method removes and returns the last key-value pair added to the dictionary. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
while person:
key, value = person.popitem()
print(key, value)

Output:

country USA
age 30
name John

In this example, we use a while loop to keep popping items from the dictionary until it is empty. Inside the loop, we use the .popitem() method to remove and retrieve the last key-value pair added to the dictionary.

Using Built-in Functions to Implicitly Iterate Through Dictionaries

Python provides built-in functions, such as map() and filter(), that can implicitly iterate through dictionaries.

Applying a Transformation to a Dictionary’s Items: map()

If you need to apply a transformation to a dictionary’s items, you can use the map() function. This function applies a function to each item of an iterable and returns an iterator with the results. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
modified_person = dict(map(lambda item: (item[0], item[1].upper()), person.items()))
print(modified_person)

Output:

{'name': 'JOHN', 'age': 30, 'country': 'USA'}

In this example, we use the map() function with a lambda function to transform each value of the dictionary to its uppercase version. We then create a new dictionary modified_person using the dict() function.

Filtering Items in a Dictionary: filter()

If you need to filter items in a dictionary based on a condition, you can use the filter() function. This function constructs an iterator from elements of an iterable for which a function returns true. Here’s an example:

person = {"name": "John", "age": 30, "country": "USA"}
filtered_person = dict(filter(lambda item: item[1] != 30, person.items()))
print(filtered_person)

Output:

{'name': 'John', 'country': 'USA'}

In this example, we use the filter() function with a lambda function to filter out the key-value pairs where the value is not equal to 30. We then create a new dictionary filtered_person using the dict() function.

Traversing Multiple Dictionaries as One

If you need to iterate through multiple dictionaries as if they were one, you can use the ChainMap class from the collections module.

Iterating Through Multiple Dictionaries With ChainMap

The ChainMap class allows you to create a single view of multiple dictionaries. Here’s an example:

from collections import ChainMap
person1 = {"name": "John", "age": 30}
person2 = {"country": "USA"}
combined_person = ChainMap(person1, person2)
for key, value in combined_person.items():
print(key, value)

Output:

name John
age 30
country USA

In this example, we use the ChainMap() constructor to create a combined view of person1 and person2. Then, we iterate through the combined view and print each key-value pair.

Iterating Through a Chain of Dictionaries With chain()

If you have a chain of dictionaries that you want to iterate through, you can use the chain() function from the itertools module. Here’s an example:

from itertools import chain
person1 = {"name": "John", "age": 30}
person2 = {"country": "USA"}
combined_person = chain(person1, person2)
for dictionary in combined_person:
for key, value in dictionary.items():
print(key, value)

Output:

name John
age 30
country USA

In this example, we use the chain() function to create a combined iterator of person1 and person2. Then, we iterate through the combined iterator and print each key-value pair.

Looping Over Merged Dictionaries: The Unpacking Operator (**)

If you have multiple dictionaries that you want to merge and iterate over, you can use the unpacking operator **. Here’s an example:

person1 = {"name": "John", "age": 30}
person2 = {"country": "USA"}
person3 = {"gender": "Male"}
combined_person = {**person1, **person2, **person3}
for key, value in combined_person.items():
print(key, value)

Output:

name John
age 30
country USA
gender Male

In this example, we use the unpacking operator ** to merge person1, person2, and person3 into a single dictionary combined_person. Then, we iterate through the merged dictionary and print each key-value pair.

Key Takeaways

  • Dictionaries in Python are one of the most important and useful built-in data structures.
  • There are multiple ways to iterate through a dictionary, including direct traversal, using the .items() method, the .keys() method, and the .values() method.
  • Be cautious when changing dictionary values or removing items during iteration to avoid unexpected behavior.
  • For more complex operations, you can use for loops, dictionary comprehensions, and built-in functions such as map() and filter().
  • To iterate through multiple dictionaries as one, you can use the ChainMap class or the chain() function.
  • To merge multiple dictionaries and iterate over the merged result, you can use the unpacking operator **.

By understanding how to iterate through a dictionary in Python and using the various methods and techniques available, you can write better, more efficient code for handling and manipulating dictionaries in your projects.