~ 3 min read

Sorting Python Dictionaries by Key: A Developer's Guide

By: Adam Richardson
Share:

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 to True 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

  1. 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.
  2. 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.
Share:
Subscribe to our newsletter

Stay up to date with our latest content - No spam!

Related Posts