[Tutor] [tutor] dictionary

Kent Johnson kent37 at tds.net
Wed Jun 7 11:56:50 CEST 2006


emilia12 at mail.bg wrote:
> how can i print a dictionary, sorted by the values?

A dictionary itself is an unordered collection and can't be sorted. But 
you can sort and print the list of key, value pairs returned by 
dict.items(). For example:

In [3]: from operator import itemgetter

In [4]: d = { 1 : 'one', 2 : 'two', 3 : 'three', 4 : 'four' }

In [5]: for k, v in sorted(d.items(), key=itemgetter(1)):
    ...:     print k, '=', v
    ...:
    ...:
4 = four
1 = one
3 = three
2 = two


d.items() returns a list of (key, value) pairs:
In [6]: d.items()
Out[6]: [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]

itemgetter(1) actually returns a function which, when called with an 
argument x, returns x[1]:
In [7]: get1 = itemgetter(1)

In [8]: get1(d.items())
Out[8]: (2, 'two')

In [9]: get1('abc')
Out[9]: 'b'

Using itemgetter(1) as the key argument to sorted() makes the sort 
happen on the second item of each pair, the value.

(This example requires Python 2.4; Python 2.3 has no sorted() function, 
you have to do the sort in a separate step using list.sort(). In earlier 
Python you have to use a different trick called DSU to sort by key.)

Kent



More information about the Tutor mailing list