Whilst I found the accepted answer useful, I was also surprised that it hasn't been updated to reference from the standard library collections module as a viable, modern alternative - designed to solve exactly this type of problem.
from operator import itemgetterfrom collections import OrderedDictx = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}sorted_x = OrderedDict(sorted(x.items(), key=itemgetter(1)))# OrderedDict([(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)])
The official documentation offers a very similar example too, but using a lambda for the sort function:
# regular unsorted dictionaryd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}# dictionary sorted by valueOrderedDict(sorted(d.items(), key=lambda t: t[1]))# OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
It is not possible to sort a dict, only to get a representation of a dict that is sorted. Dicts are inherently orderless, but other types, such as lists and tuples, are not. So you need a sorted representation, which will be a list—probably a list of tuples.
For instance,
import operatorx = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}sorted_x = sorted(x.items(), key=operator.itemgetter(1))
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 operatorx = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}sorted_x = sorted(x.items(), key=operator.itemgetter(0))
have a dictionary of values read from two fields in a database: a string field and a numeric field. The string field is unique, so that is the key of the dictionary.
I can sort on the keys, but how can I sort based on the values?
Note: I have read Stack Overflow question and probably could change my code to have a list of dictionaries, but since I do not really need a list of dictionaries I wanted to know if there is a simpler solution.
Series
from the dictionary and sort it usingpandas.Series.order
– Nov 27 '14 at 14:22