In this article, we will discuss different ways to iterate over all values of a nested dictionary.
Nested dictionary is a dictionary of dictionaries. It is a kind of dictionary which has another dictionary objects as values in the key-value pairs. These dictionary values can also have another dictionaries internally. The nested structure of dictionary can go on and on.
For example,
# A Nested dictionary i.e. dictionaty of dictionaries students = { 'ID 1': {'Name': 'Shaun', 'Age': 35, 'City': 'Delhi'}, 'ID 2': {'Name': 'Ritika', 'Age': 31, 'City': 'Mumbai'}, 'ID 3': {'Name': 'Smriti', 'Age': 33, 'City': 'Sydney'}, 'ID 4': {'Name': 'Jacob', 'Age': 23, 'City': {'perm': 'Tokyo', 'current': 'London'}}, }
Now we want to iterate over all values of this dictionary i.e. including the values of internal dictionaries too. The expected result is like,
Shaun 35 Delhi Ritika 31 Mumbai Smriti 33 Sydney Jacob 23 Tokyo London
Let’s see how to do that.
Iterate over all values of a nested dictionary in python
For a normal dictionary, we can just call the values() function of dictionary to get an iterable sequence of values. But in a nested dictionary a value can be an another dictionary object. For that we need to again call the values() function and get another iterable sequence of values and then look for dict objects in those values too. We can achieve this in a simple manner using reccursion.
We have created a function that accepts a dictionary as an argument and yields all values in it. Included the values of internal / nested dictionaries. For this it uses the recursion. Let’s use this function to iterate over all values of a dictionary of dictionaries,
Frequently Asked:
- How to Initialize a Dictionary with List in Python
- Python: Check if value exists in list of dictionaries
- Python: Print all key-value pairs of a dictionary
- Create Dictionary With Predefined Keys in Python
# A Nested dictionary i.e. dictionaty of dictionaries students = { 'ID 1': {'Name': 'Shaun', 'Age': 35, 'City': 'Delhi'}, 'ID 2': {'Name': 'Ritika', 'Age': 31, 'City': 'Mumbai'}, 'ID 3': {'Name': 'Smriti', 'Age': 33, 'City': 'Sydney'}, 'ID 4': {'Name': 'Jacob', 'Age': 23, 'City': {'perm': 'Tokyo', 'current': 'London'}}, } def nested_dict_values_iterator(dict_obj): ''' This function accepts a nested dictionary as argument and iterate over all values of nested dictionaries ''' # Iterate over all values of given dictionary for value in dict_obj.values(): # Check if value is of dict type if isinstance(value, dict): # If value is dict then iterate over all its values for v in nested_dict_values_iterator(value): yield v else: # If value is not dict type then yield the value yield value #Loop through all nested dictionary values for value in nested_dict_values_iterator(students): print(value)
Output:
Shaun 35 Delhi Ritika 31 Mumbai Smriti 33 Sydney Jacob 23 Tokyo London
Using the function nested_dict_values_iterator() we iterated over all the values of a dictionary of dictionaries and printed each value.
How it works ?
Inside the function, we iterated over all the values of a given dictionary object and for each value it checks if the value is of dict type or not. If not then it just yields the value, but if value is dict type then it reccusrively calls itself with the dict value object as argument and then yields all its values. The process goes on and on, till all the internal dictionary objects are not covered. This is how it yields all the values of a dictionary of dictionaries.
Get a list of all values of nested dictionary in python
We can also create a list of all values of a dictionary of dictionaries, by passing the yielded values from function nested_dict_values_iterator() to the list(). For example,
# A Nested dictionary i.e. dictionaty of dictionaries students = { 'ID 1': {'Name': 'Shaun', 'Age': 35, 'City': 'Delhi'}, 'ID 2': {'Name': 'Ritika', 'Age': 31, 'City': 'Mumbai'}, 'ID 3': {'Name': 'Smriti', 'Age': 33, 'City': 'Sydney'}, 'ID 4': {'Name': 'Jacob', 'Age': 23, 'City': {'perm': 'Tokyo', 'current': 'London'}}, } def nested_dict_values_iterator(dict_obj): ''' This function accepts a nested dictionary as argument and iterate over all values of nested dictionaries ''' # Iterate over all values of given dictionary for value in dict_obj.values(): # Check if value is of dict type if isinstance(value, dict): # If value is dict then iterate over all its values for v in nested_dict_values_iterator(value): yield v else: # If value is not dict type then yield the value yield value # Get list of all values of nested dictionary all_values = list(nested_dict_values_iterator(students)) print(all_values)
Output:
['Shaun', 35, 'Delhi', 'Ritika', 31, 'Mumbai', 'Smriti', 33, 'Sydney', 'Jacob', 23, 'Tokyo', 'London']
Summary:
In this article we learned how to iterate over all values of a nested dictionary object i.e. a dictionary of dictionaries.