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.
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.
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.
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)]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With