Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort a Python dict's keys by value

Tags:

I have a dict that looks like this

{ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }

And I would like to convert it DESC and create a list of just the keywords. Eg, this would return

["keyword3" , "keyword1" , "keyword4" , "keyword2"]

All examples I found use lambda and I'm not very strong with that. Is there a way I could loop through this, and sort them as I go? Thanks for any suggestions.

PS: I could create the initial dict differently if it would help.

like image 394
Shane Reustle Avatar asked Aug 05 '10 18:08

Shane Reustle


People also ask

How do you sort keys in Python?

Custom Sorting With key= For example with a list of strings, specifying key=len (the built in len() function) sorts the strings by length, from shortest to longest. The sort calls len() for each string to get the list of proxy length values, and then sorts with those proxy values.

Can you sort a Python dictionary by key?

To sort a dictionary by key in Python, use a combination of the sort() and OrderedDict() methods. The OrderedDict() is a method of the collections module that returns an instance of a dict subclass with a method specialized for rearranging dictionary order.

How do you sort a dictionary as per value?

Sort Dictionary Using a for Loop We can sort a dictionary with the help of a for loop. First, we use the sorted() function to order the values of the dictionary. We then loop through the sorted values, finding the keys for each value. We add these keys-value pairs in the sorted order into a new dictionary.


1 Answers

You could use

res = list(sorted(theDict, key=theDict.__getitem__, reverse=True)) 

(You don't need the list in Python 2.x)

The theDict.__getitem__ is actually equivalent to lambda x: theDict[x].

(A lambda is just an anonymous function. For example

>>> g = lambda x: x + 5 >>> g(123) 128 

This is equivalent to

>>> def h(x): ...   return x + 5 >>> h(123) 128 

)

like image 171
kennytm Avatar answered Sep 20 '22 04:09

kennytm