Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort a dictionary by value (DESC) then by key (ASC)?

Just after discovering the amazing sorted(), I became stuck again.

The problem is I have a dictionary of the form string(key) : integer(value) and I need to sort it in descending order of its integer values, but if two elements where to have same value, then by ascending order of key.

An example to make it clearer:

d = {'banana':3, 'orange':5, 'apple':5} out: [('apple', 5), ('orange', 5), ('banana', 3)] 

After doing some research I arrived at something like:

sorted(d.items(), key=operator.itemgetter(1,0), reverse=True) out: [('orange', 5), ('apple', 5), ('banana', 3)] 

This is because it's reverse-sorting both the value and the key. I need the key to be un-reversed.

like image 439
ecr Avatar asked Mar 12 '13 20:03

ecr


People also ask

How do you sort a dictionary based on value descending?

Sorting a dict by value descending using list comprehension. The quickest way is to iterate over the key-value pairs of your current dict and call sorted passing the dictionary values and setting reversed=True . If you are using Python 3.7, regular dict s are ordered by default.

How do you sort dictionaries by dictionary value?

To sort a list of dictionaries according to the value of the specific key, specify the key parameter of the sort() method or the sorted() function. By specifying a function to be applied to each element of the list, it is sorted according to the result of that function.


1 Answers

Something like

In [1]: d = {'banana': 3, 'orange': 5, 'apple': 5}  In [2]: sorted(d.items(), key=lambda x: (-x[1], x[0])) Out[2]: [('apple', 5), ('orange', 5), ('banana', 3)] 
like image 87
Lev Levitsky Avatar answered Oct 11 '22 08:10

Lev Levitsky