· Python · 3 min read
Sorting Python Dictionaries by Key: A Developer's Guide
Sorting Python Dictionaries by Key: A Developer’s Guide
Introduction
Sorting a Python dictionary by key can be a valuable skill for developers who need to organize and retrieve data efficiently. This article dives into the subject, providing useful insights into sorting dictionaries by key, where it can be beneficial in real-world applications.
Properties and Parameters
A Python dictionary is a collection of key-value pairs, where each unique key maps to a value. Python dictionaries are unordered, making it challenging to sort or retrieve elements in a specific order. However, there are several ways developers can sort a dictionary by key, mainly using two built-in functions: sorted()
and dictionary.items()
.
sorted():
- It takes an iterable as input (such as a list or dictionary) and returns a sorted list.
- It has an optional argument called
key
, which allows specifying a custom function that determines the sort order. - Another optional argument,
reverse
, can be set toTrue
to sort the iterable in reverse order.
dictionary.items():
- It returns a view object that displays a list of dictionary’s key-value tuple pairs.
- This function enables the conversion of a dictionary into a list of tuples, sortable by key.
Here’s how to use these functions to sort a Python dictionary by key:
Simplified Real-Life Example
Suppose we have a dictionary containing the names and ages of people:
ages = {'Alice': 30, 'Bob': 25, 'Charlie': 40, 'Diana': 35}
We want to sort the dictionary in ascending order based on the person’s name (dictionary’s key). We can achieve this by using the sorted()
function combined with dictionary.items()
:
sorted_ages = dict(sorted(ages.items()))
print(sorted_ages)
The output will be:
{ "Alice": 30, "Bob": 25, "Charlie": 40, "Diana": 35 }
Complex Real-Life Example
Let’s imagine we have a dictionary containing country codes and their respective populations:
country_populations = {
'US': 328_200_000,
'CN': 1_393_000_000,
'JP': 126_300_000,
'IN': 1_366_000_000,
'BR': 210_100_000,
'PK': 217_600_000,
'NG': 200_900_000
}
We want to sort this data by country code first, but also have the flexibility to sort it by population. We can define a custom sorting function that takes input arguments for sorting by key, value, or both, ascending or descending:
def sort_dict(dictionary, by_key=True, by_value=False, reverse_order=False):
if by_key:
sort_func = lambda item: item[0]
elif by_value:
sort_func = lambda item: item[1]
else:
sort_func = lambda item: item
return dict(sorted(dictionary.items(), key=sort_func, reverse=reverse_order))
Now we can sort country_populations
in various ways using our custom function:
# Sort by country code (ascending)
sorted_by_code = sort_dict(country_populations)
print(sorted_by_code)
# Sort by country code (descending)
sorted_by_code_desc = sort_dict(country_populations, reverse_order=True)
print(sorted_by_code_desc)
# Sort by population (ascending)
sorted_by_population = sort_dict(country_populations, by_key=False, by_value=True)
print(sorted_by_population)
# Sort by population (descending)
sorted_by_population_desc = sort_dict(country_populations, by_key=False, by_value=True, reverse_order=True)
print(sorted_by_population_desc)
The output will show the dictionary sorted in different ways based on the criteria we provided:
# Sort by country code (ascending)
{'BR': 210100000, 'CN': 1393000000, 'IN': 1366000000, 'JP': 126300000, 'NG': 200900000, 'PK': 217600000, 'US': 328200000}
# Sort by country code (descending)
{'US': 328200000, 'PK': 217600000, 'NG': 200900000, 'JP': 126300000, 'IN': 1366000000, 'CN': 1393000000, 'BR': 210100000}
# Sort by population (ascending)
{'JP': 126300000, 'BR': 210100000, 'NG': 200900000, 'PK': 217600000, 'US': 328200000, 'IN': 1366000000, 'CN': 1393000000}
# Sort by population (descending)
{'CN': 1393000000, 'IN': 1366000000, 'US': 328200000, 'PK': 217600000, 'NG': 200900000, 'BR': 210100000, 'JP': 126300000}
Personal Tips
- Sorting a dictionary based on a specific criterion is a powerful feature but can be computationally expensive for large datasets. Consider alternative data structures or other optimizations if dictionary size or performance is an issue.
- When sorting a dictionary, remember that the returned value is a newly created dictionary. If you need to modify the original dictionary, make sure to apply changes to the sorted version.