Sort a Dictionary by Key in Python
Python version 3.7 and later preserve insertion order, making it possible to sort a dictionary. However, versions earlier than 3.7 do not maintain this order, so sorting a dictionary won’t preserve the order. That’s why you should use collections.OrderedDict for Python versions earlier than 3.7.
You can sort a dictionary by key using the following methods:
(1) Using the sorted() function
You can use the built-in sorted() function to sort a dictionary by key.
For example:
my_dict = {'d':4, 'a': 1, 'c': 3, 'b': 2}
sorted_dict = dict(sorted(my_dict.items()))
print(sorted_dict)
Output:
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
Explanation:
my_dict.items() returns a view of the dictionary’s key-value pairs as tuples in a list.
sorted(my_dict.items() sorts these tuples by the keys (the first element of each tuple) in ascending order.
dict(...) converts the sorted list of tuples back into a dictionary.
(2) Using collections.OrderedDict
If you are using a Python version earlier than 3.7 and want to preserve the order, you can use collections.OrderedDict.
For example:
from collections import OrderedDict
my_dict = {'d':4, 'a': 1, 'c': 3, 'b': 2}
sorted_dict = OrderedDict(sorted(my_dict.items()))
print(sorted_dict)
Output:
OrderedDict({'a': 1, 'b': 2, 'c': 3, 'd': 4})
(3) Sorting in descending order
If you want to sort a dictionary in descending order, you can set the reverse parameter of the sorted() function to True.
For example:
my_dict = {'d':4, 'a': 1, 'c': 3, 'b': 2}
sorted_dict = dict(sorted(my_dict.items(), reverse=True))
print(sorted_dict)
Output:
{'d': 4, 'c': 3, 'b': 2, 'a': 1}
(4) Case-insensitive sorting
To sort a dictionary by key in a case-insensitive manner, you can use str.lower() as the key function inside sorted() function to convert the keys to lowercase before conversion.
For example:
from collections import OrderedDict
my_dict = {'D':4, 'a': 1, 'c': 3, 'B': 2}
sorted_dict = dict(sorted(my_dict.items(), key=lambda x:x[0].lower()))
print(sorted_dict)
Output:
{'a': 1, 'B': 2, 'c': 3, 'D': 4}