Horje
Python Sort Nested Dictionary by Multiple Values

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)

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`).

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



Reffered: https://www.geeksforgeeks.org


Python

Related
How to Use Yield Keyword for Memory Efficient Python Code How to Use Yield Keyword for Memory Efficient Python Code
What Does the Enumerate Function in Python do? What Does the Enumerate Function in Python do?
Is Python Case-Sensitive? Yes, Here's What You Need to Know Is Python Case-Sensitive? Yes, Here's What You Need to Know
Why Python Cannot Be Used For Making An Os Why Python Cannot Be Used For Making An Os
How to fix "SyntaxError: invalid character" in Python How to fix "SyntaxError: invalid character" in Python

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
9