Python Sort Nested Dictionary by Multiple Values
Last Updated :
06 May, 2024
We are given a nested dictionary and our task is to sort a nested dictionary by multiple values in Python and print the result. In this article, we will see how to sort a nested dictionary by multiple values in Python.
Example:
Input : {'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30},
'C': {'score': 78, 'age': 22}}
Output: {'C': {'score': 78, 'age': 22},
'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30}}
Explanation : In above example, the nested dictionary is sorted by score in ascending order.
Python Sort Nested Dictionary by Multiple Values
Below are some of the ways by which we can sort a nested dictionary by multiple values in Python:
- Using sorted() function
- Using dictionary comprehension
- Using collections.OrderedDict()
- Using pandas library
Sort Nested Dictionary by Multiple Values Using sorted() Function
In this example, below Python code sorts a nested dictionary (`nested_dict`) by the 'score' values in the inner dictionaries, creating a new dictionary (`sorted_nested_dict`) that reflects the sorted order. The result is then printed.
Python
nested_dict = {'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30},
'C': {'score': 78, 'age': 27}}
sorted_nested_dict = dict(sorted(nested_dict.items(), key=lambda x: (x[1]['score'])))
print(sorted_nested_dict)
Output{'C': {'score': 78, 'age': 27}, 'A': {'score': 85, 'age': 25}, 'B': {'score': 92, 'age': 30}}
Sort Nested Dictionary by Multiple Values Using Dictionary Comprehension
In this example, below Python code uses dictionary comprehension to sort the nested dictionary `nested_dict` based on the 'score' and 'age' values in the inner dictionaries. The result is stored in `sorted_nested_dict` and then printed.
Python
nested_dict = {'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30},
'C': {'score': 78, 'age': 22}}
sorted_nested_dict = {k: v for k, v in sorted(nested_dict.items(), key=lambda x: (x[1]['score'], x[1]['age']))}
print(sorted_nested_dict)
Output{'C': {'score': 78, 'age': 22}, 'A': {'score': 85, 'age': 25}, 'B': {'score': 92, 'age': 30}}
Sort Nested Dictionary by Multiple Values Using collections.OrderedDict()
In this example, below Python code uses , the collections module `OrderedDict` is used to create a sorted version (`sorted_nested_dict`) of the nested dictionary `nested_dict`. The sorting is based on the 'score' and 'age' values in the inner dictionaries, and the result is then printed.
Python
from collections import OrderedDict
nested_dict = {'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30},
'C': {'score': 78, 'age': 22}}
sorted_nested_dict = OrderedDict(sorted(nested_dict.items(), key=lambda x: (x[1]['score'], x[1]['age'])))
print(sorted_nested_dict)
OutputOrderedDict([('C', {'score': 78, 'age': 22}), ('A', {'score': 85, 'age': 25}), ('B', {'score': 92, 'age': 30})])
Sort Nested Dictionary by Multiple Values Using Pandas library
In this example, below Python code uses the Pandas library to convert the nested dictionary `nested_dict` into a DataFrame (`df`). Then, it sorts the DataFrame based on the 'score' and 'age' columns, creating `sorted_df`. Finally, it converts the sorted DataFrame back into a dictionary (`sorted_nested_dict`).
Python
import pandas as pd
nested_dict = {'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30},
'C': {'score': 78, 'age': 22}}
df = pd.DataFrame.from_dict(nested_dict, orient='index')
sorted_df = df.sort_values(by=['score', 'age'])
sorted_nested_dict = sorted_df.to_dict(orient='index')
print(sorted_nested_dict)
Output{'C': {'score': 78, 'age': 22}, 'A': {'score': 85, 'age': 25}, 'B': {'score': 92, 'age': 30}}
Sort Nested Dictionary by Multiple Values Using itemgetter Function
In this example, we employ the itemgetter function from the operator module to sort the nested dictionary nested_dict based on specified keys, such as 'score' and 'age'.
Python
from operator import itemgetter
def sort_nested_dict(nested_dict, *keys):
sorted_items = sorted(nested_dict.items(), key=lambda x: itemgetter(*keys)(x[1]))
return {k: v for k, v in sorted_items}
nested_dict = {'A': {'score': 85, 'age': 25},
'B': {'score': 92, 'age': 30},
'C': {'score': 78, 'age': 22}}
sorted_nested_dict = sort_nested_dict(nested_dict, 'score', 'age')
print(sorted_nested_dict)
# Nikunj Sonigara
Output{'A': {'age': 25, 'score': 85}, 'C': {'age': 22, 'score': 78}, 'B': {'age': 30, 'score': 92}}
Similar Reads
Sort a Nested Dictionary by Value in Python Sorting a nested dictionary in Python involves understanding its structure, defining sorting criteria, and utilizing the `sorted()` function or `.sort()` method with a custom sorting function, often a lambda. This process is essential for organizing complex, hierarchical data efficiently. Mastery of
3 min read
Sort Nested Dictionary by Value Python Descending Sorting a nested dictionary in Python based on its values is a common task, and it becomes even more versatile when you need to sort in descending order. In this article, we'll explore some different methods to achieve this using various Python functionalities. Let's dive into more ways to efficient
3 min read
Python Get All Values from Nested Dictionary In this article, we will learn how we can Get all Values from Nested Dictionary in Python Programming. A nested Dictionary in Python is a dictionary that contains another dictionary as its values. Using this, we can create a nested structure where each of the key-value pairs is in the outer dictiona
5 min read
Access Dictionary Values Given by User in Python Dictionaries are a fundamental data structure in Python, providing a flexible way to store and retrieve data using key-value pairs. Accessing dictionary values is a common operation in programming, and Python offers various methods to accomplish this task efficiently. In this article, we will explor
4 min read
Get Dictionary Value by Key - Python We are given a dictionary and our task is to retrieve the value associated with a given key. However, if the key is not present in the dictionary we need to handle this gracefully to avoid errors. For example, consider the dictionary : d = {'name': 'Alice', 'age': 25, 'city': 'New York'} if we try t
3 min read