How to sort a dictionary by value (DESC) then by key (ASC)?
34,605
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)]
Related videos on Youtube
Author by
ecr
Updated on July 09, 2022Comments
-
ecr almost 2 years
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.
-
Ananda G almost 4 yearsThis is one of my favorite coding plans for Python script.
-
Malavan almost 3 yearswhy -x[1] required ? can you explain that part ?
-
Lev Levitsky almost 3 years@Malavan x[1] would be the dict value. It is negated so that bigger values come before the smaller ones (descending order)