How do I sort a dictionary by value in Python

In this blog post, we’ll explore various methods to sort a dictionary by value in Python, with clear examples and output. When working with dictionaries in Python, you might find yourself needing to sort the items by their values. This can be helpful in different scenarios like when you’re aiming to prioritize data, organize it for reporting, or simply understand the dataset’s distribution.

Sort a dictionary by value in Python

Table of Contents

 

Sort a Dictionary By Value Using the sorted() Function

A common approach to sort a dictionary by its values is to use the sorted() function. This function returns a new sorted list from the items in an iterable. To sort a dictionary, you’ll need to pass the dictionary’s items along with a key parameter that specifies to sort by value.

Here’s an example:

def sort_dict_by_value(d):
    return sorted(d.items(), key=lambda item: item[1])

# Define a dictionary
my_dict = {'apple': 5, 'banana': 3, 'cherry': 8}

# Call the function and print the result
sorted_items = sort_dict_by_value(my_dict)
print(sorted_items)

Output:

[('banana', 3), ('apple', 5), ('cherry', 8)]

 

Sort Using lambda

The lambda function is an anonymous function in Python, which can be used to create small, one-time, anonymous function objects in Python. In our sorting example, the lambda takes an item from dictionary items and returns its second element (the value).

Let’s consider another example with a more complex dictionary:

def sort_dict_by_value_complex(d):
    return sorted(d.items(), key=lambda item: item[1])

# Define a dictionary with more complex data types
my_complex_dict = { 'monday': (3, 30), 'tuesday': (1, 45), 'wednesday': (2, 15)}

# Call the function and print the result
sorted_complex_items = sort_dict_by_value_complex(my_complex_dict)
print(sorted_complex_items)

Output:

[('tuesday', (1, 45)), ('wednesday', (2, 15)), ('monday', (3, 30))]

 

Sort Using itemgetter

An alternative to using a lambda is to use the itemgetter() function from the operator module. It is generally faster than lambda and makes the code a bit more readable for some.

An example using itemgetter():

from operator import itemgetter

def sort_dict_by_itemgetter(d):
    return sorted(d.items(), key=itemgetter(1))

# Define a dictionary
my_dict = {'python': 10, 'java': 7, 'c++': 5, 'javascript': 8}

# Call the function and print the result
sorted_items = sort_dict_by_itemgetter(my_dict)
print(sorted_items)

Output:

[('c++', 5), ('java', 7), ('javascript', 8), ('python', 10)]

 

Sorting in Descending Order

To sort a dictionary descending order, you can still use the sorted() function but with the additional parameter reverse=True.

Here’s how you can do it:

def sort_dict_descending(d):
    return sorted(d.items(), key=lambda item: item[1], reverse=True)

# Define a dictionary
my_dict = {'python': 10, 'java': 7, 'c++': 5, 'javascript': 8}

# Call the function and print the result
sorted_descending_items = sort_dict_descending(my_dict)
print(sorted_descending_items)

Output:

[('python', 10), ('javascript', 8), ('java', 7), ('c++', 5)]

 

Conclusive Summary

Sorting a dictionary by value in Python can be achieved in several ways, the most popular being the sorted() function. This function, when combined with a lambda expression or the itemgetter method, can organize your dictionaries efficiently. Whether you need sorting in ascending or descending order, these methods are robust and can handle a variety of data types as values. Understanding these methods enhances your ability to manipulate and present data effectively in Python.