How can I sort a dictionary by key?
Standard Python dictionaries are unordered (until Python 3.7). Even if you sorted the (key,value) pairs, you wouldn't be able to store them in a dict
in a way that would preserve the ordering.
The easiest way is to use OrderedDict
, which remembers the order in which the elements have been inserted:
In [1]: import collectionsIn [2]: d = {2:3, 1:89, 4:5, 3:0}In [3]: od = collections.OrderedDict(sorted(d.items()))In [4]: odOut[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])
Never mind the way od
is printed out; it'll work as expected:
In [11]: od[1]Out[11]: 89In [12]: od[3]Out[12]: 0In [13]: for k, v in od.iteritems(): print k, v ....: 1 892 33 04 5
Python 3
For Python 3 users, one needs to use the .items()
instead of .iteritems()
:
In [13]: for k, v in od.items(): print(k, v) ....: 1 892 33 04 5
Dictionaries themselves do not have ordered items as such, should you want to print them etc to some order, here are some examples:
In Python 2.4 and above:
mydict = {'carl':40, 'alan':2, 'bob':1, 'danny':3}for key in sorted(mydict): print "%s: %s" % (key, mydict[key])
gives:
alan: 2bob: 1carl: 40danny: 3
(Python below 2.4:)
keylist = mydict.keys()keylist.sort()for key in keylist: print "%s: %s" % (key, mydict[key])
Source: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
For CPython/PyPy 3.6, and any Python 3.7 or higher, this is easily done with:
>>> d = {2:3, 1:89, 4:5, 3:0}>>> dict(sorted(d.items())){1: 89, 2: 3, 3: 0, 4: 5}