DEV Community

loading...
Cover image for How do I sort a dictionary by value ?

How do I sort a dictionary by value ?

courseprobe profile image Course Probe ・2 min read

On this short tutorial, let’s explore different ways of sorting your python dictionary by values.

Python 3.6+

>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}

{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
Enter fullscreen mode Exit fullscreen mode

Older Python

It is not possible to sort a dictionary, only to get a representation of a dictionary that is sorted. Dictionaries are inherently orderless, but other types, such as lists and tuples, are not. So you need an ordered data type to represent sorted values, which will be a list — probably a list of tuples.

For instance,

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
Enter fullscreen mode Exit fullscreen mode

sorted_x will be a list of tuples sorted by the second element in each tuple. dict(sorted_x) == x.

And for those wishing to sort on keys instead of values:

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
Enter fullscreen mode Exit fullscreen mode

In Python3 since unpacking is not allowed [1] we can use

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
Enter fullscreen mode Exit fullscreen mode

If you want the output as a dict, you can use collections.OrderedDict:

import collections

sorted_dict = collections.OrderedDict(sorted_x)
Enter fullscreen mode Exit fullscreen mode

Another option might be:

sorted(d.items(), key=lambda x: x[1])
Enter fullscreen mode Exit fullscreen mode

This will sort the dictionary by the values of each entry within the dictionary from smallest to largest.

To sort it in descending order just add reverse=True:

sorted(d.items(), key=lambda x: x[1], reverse=True)
Enter fullscreen mode Exit fullscreen mode

Input:

d = {'one':1,'three':3,'five':5,'two':2,'four':4}
a = sorted(d.items(), key=lambda x: x[1])    
print(a)
Enter fullscreen mode Exit fullscreen mode

Output:

[('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
Enter fullscreen mode Exit fullscreen mode

source: Medium

Resources you might find useful:

Get the book: learning Python programming from scratch


Other Dev posts:

Discussion (0)

pic
Editor guide