top

Search

Python Tutorial

.

UpGrad

Python Tutorial

Sort Dictionary by Value in Python

Introduction

Understanding data structures is pivotal to mastering Python programming. One such fundamental data structure is the dictionary. Knowing how to sort dictionary by value in Python can elevate the efficiency and readability of your code. This tutorial dives into the intricate nuances of sorting dictionaries by values in Python, a must-know for every Python enthusiast.

Overview

In Python, dictionaries are akin to real-world dictionaries, where you have a ‘key’ and its associated ‘value’. Though dictionaries are inherently unordered, there are scenarios where you might want to sort them, particularly by values, to meet specific requirements or enhance data analysis. This tutorial takes you through each of these situations in detail.

Why Do You Need Sorting in Dictionary

Dictionaries serve as a key player in data storage in Python. Each key-value pair holds its unique significance. Let’s delve into why sorting dictionaries becomes imperative:

  • Data Analysis: In fields like data science or analytics, sorting dictionaries can aid in recognizing patterns, trends, or anomalies, ensuring accurate data interpretations.

  • Ease of Data Retrieval: Sorting simplifies locating specific data points, especially in larger dictionaries, accelerating the data retrieval process.

  • Improved Readability: A sorted dictionary, especially by values, allows developers or data analysts to quickly comprehend the data’s nature and structure.

Moreover, the intricacies of sorting dictionaries extend beyond the mere action of sorting. One can sort:

  • By keys: The default method for many.

  • By values: The focus of this tutorial, which sometimes necessitates a different approach, especially when values are the prime concern.

Sorting A Dictionary By its Key in Python 

To sort a dictionary by its keys in Python, you can use the sorted() function along with a dictionary comprehension. Here's an example:

Code:

# Original dictionary
my_dict = {"banana": 3, "apple": 1, "cherry": 2}
# Sort the dictionary by keys
sorted_dict = {key: my_dict[key] for key in sorted(my_dict)}
print(sorted_dict)

In this example, the sorted() function sorts the dictionary's keys alphabetically, and a new dictionary is created with the sorted keys. sorted(my_dict) sorts the keys of the my_dict dictionary alphabetically. A new dictionary, sorted_dict, is created using dictionary comprehension to maintain the original key-value pairs with sorted keys.

Example 1: Sorting the dictionary by key

This is similar to the example above but with a focus on sorting the dictionary and not necessarily creating a new one:

Code:

# Original dictionary
my_dict = {"banana": 3, "apple": 1, "cherry": 2}
# Sort the dictionary by keys in place
my_dict = {key: my_dict[key] for key in sorted(my_dict)}
print(my_dict)

In this code, my_dict dictionary is updated with its keys sorted in alphabetical order.

Example 2: Displaying the keys in sorted order

If you only want to display the sorted keys without altering the original dictionary, you can do it like this:

Code:

# Original dictionary
my_dict = {"banana": 3, "apple": 1, "cherry": 2}
# Get sorted keys
sorted_keys = sorted(my_dict.keys())
print(sorted_keys)

To display the sorted keys without modifying the original dictionary, you can use the sorted() function with my_dict.keys(). The sorted keys are stored in the sorted_keys variable and can be printed.

Example 3: Sorting the keys and values in alphabetical order using the key

Code:

# Original dictionary
my_dict = {"banana": 3, "apple": 1, "cherry": 2}
# Sort the dictionary by keys and create a list of key-value pairs
sorted_items = sorted(my_dict.items())
print(sorted_items)

The sorted() function is used on my_dict.items() to create a list of key-value pairs sorted by keys.

Sorting Dictionary By Value in Python

To sort dictionary by value in Python, you can use the sorted() function with a custom sorting key. Here is an example:

Code:

# Original dictionary
my_dict = {"banana": 3, "apple": 1, "cherry": 2}
# Sort the dictionary by values
sorted_dict = {key: val for key, val in sorted(my_dict.items(), key=lambda x: x[1])}
print(sorted_dict)

In the above example, the sorted() function sorts the dictionary by values, creating a new dictionary with keys sorted by their corresponding values. The code sorts the dictionary items by values in ascending order, creating a new dictionary sorted_dict with keys ordered by their corresponding values.

Alphabetically Sorting the Keys and Values using the Value

Code:

# Original dictionary
my_dict = {"banana": 3, "apple": 1, "cherry": 2}
# Sort the dictionary by values and create a list of key-value pairs
sorted_items = sorted(my_dict.items(), key=lambda x: x[1])
print(sorted_items)
In this example, both keys and values are sorted in alphabetical order based on values.

The sorted() function is used on my_dict.items() with a custom sorting key that sorts by the second element (value) of each pair.

Sorting a Dictionary of Nested Dictionaries by Inner Key

In this example, we have a dictionary of students where each student is represented by a nested dictionary. We want to sort the students by their ages (inner key).

Code:

# Original dictionary with nested dictionaries
students = {
    "John": {"age": 25, "grade": "A"},
    "Alice": {"age": 22, "grade": "B"},
    "Bob": {"age": 28, "grade": "B"},
}
# Sort the dictionary by student age
sorted_students = {key: value for key, value in sorted(students.items(), key=lambda x: x[1]["age"])}
print(sorted_students)

This code sorts the students by age and creates a new dictionary with students ordered by their ages.

Sorting a Dictionary by Values with Custom Data Types

In this example, we have a dictionary where values are complex data types like tuples. We want to sort the dictionary based on a specific element within the tuple.

Code:

# Original dictionary with complex values (tuples)
data = {
    "item1": (3, "apple"),
    "item2": (1, "banana"),
    "item3": (2, "cherry"),
}
# Sort the dictionary by the second element (string) in the tuple
sorted_data = {key: value for key, value in sorted(data.items(), key=lambda x: x[1][1])}
print(sorted_data)

This code sorts the dictionary by the second element in the tuple (the string) and creates a new dictionary with items ordered alphabetically.

Sorting a Dictionary of Lists by List Length

In this example, we have a dictionary where values are lists, and we want to sort the dictionary by the length of the lists.

Code:

# Original dictionary with lists as values
data = {
    "list1": [1, 2, 3],
    "list2": [4, 5],
    "list3": [6, 7, 8, 9],
}
# Sort the dictionary by the length of the lists
sorted_data = {key: value for key, value in sorted(data.items(), key=lambda x: len(x[1]))}
print(sorted_data)

This code sorts the dictionary by the length of the lists and creates a new dictionary with lists ordered by their lengths.

These examples demonstrate more complex sorting scenarios with dictionaries, including nested dictionaries, complex data types within values, and sorting based on custom criteria.

Sorting a Dictionary of Dictionaries by Nested Values

In this example, we have a dictionary where each key corresponds to a person's name, and each value is a dictionary containing attributes like age, city, and gender. We want to sort the dictionary based on the age of each person.

Code:

# Original dictionary with nested dictionaries
people = {
    "John": {"age": 25, "city": "New York", "gender": "Male"},
    "Alice": {"age": 22, "city": "Los Angeles", "gender": "Female"},
    "Bob": {"age": 28, "city": "Chicago", "gender": "Male"},
}
# Sort the dictionary by the age of each person
sorted_people = {key: value for key, value in sorted(people.items(), key=lambda x: x[1]["age"])}
print(sorted_people)

This code sorts the dictionary based on the age of each person, creating a new dictionary with people ordered by their ages.

Sorting a Dictionary with Complex Values by Specific Attributes

In this example, we have a dictionary with complex values representing products. We want to sort the products based on their prices.

Code:

# Original dictionary with complex values representing products
products = {
    "product1": {"name": "Apple", "price": 1.0, "category": "Fruit"},
    "product2": {"name": "Banana", "price": 0.5, "category": "Fruit"},
    "product3": {"name": "Laptop", "price": 1000.0, "category": "Electronics"},
}
# Sort the dictionary by product price
sorted_products = {key: value for key, value in sorted(products.items(), key=lambda x: x[1]["price"])}
print(sorted_products)

This code sorts the dictionary of products based on their prices, creating a new dictionary with products ordered by price.

Sorting a Dictionary with Custom Objects

In this example, we have a dictionary where the values are custom objects of a class called Person. We want to sort the dictionary based on a specific attribute of the Person objects, such as their ages.

Code:

# Custom class definition
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
# Original dictionary with custom objects as values
people = {
    "person1": Person("John", 25),
    "person2": Person("Alice", 22),
    "person3": Person("Bob", 28),
}
# Sort the dictionary by the age attribute of the custom objects
sorted_people = {key: value for key, value in sorted(people.items(), key=lambda x: x[1].age)}
print(sorted_people)

This code sorts the dictionary of custom objects based on the age attribute of the Person objects, creating a new dictionary with people ordered by age.

Conclusion

Sorting dictionaries by value in Python is more than just a coding technique; it’s an asset in data handling, ensuring streamlined operations, efficient data analysis, and enhanced readability. As the world of Python continues to grow, mastering such intricacies becomes paramount. Consider delving deeper into Python’s world with upGrad’s comprehensive courses, equipping yourself with the knowledge to tackle real-world challenges adeptly.

FAQs

1. Sort dictionary by value in Python example

Utilize the sorted() function combined with a lambda function: sorted(dict.items(), key=lambda x: x[1]).

2. Sort dictionary by value python descending

Use the reverse=True parameter with the sorted() function.

3. Sort dictionary by key Python

Simply use: sorted(dict.items()).

4. Python sort dictionary by key=lambda

It refers to using a lambda function to specify the key for sorting: sorted(dict.items(), key=lambda x: x[0]).

5. Sort dictionary by value python without lambda

One can use itemgetter: from operator import itemgetter and then sorted(dict.items(), key=itemgetter(1)).

Leave a Reply

Your email address will not be published. Required fields are marked *