Open In App

Python Sort Nested Dictionary by Multiple Values

Last Updated : 26 Mar, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

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.

Python3
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.

Python3
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.

Python3
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)

Output
OrderedDict([('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`).

Python3
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}}


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads