辞書を値でソートする
Python で辞書をソートしようとすると、
>>> h = {'a' : 200, 'b' : 300, 'c' : 500, 'd' : 100, 'e' : 400}
>>> for k, v in sorted(h):
... print k, v
...
Traceback (most recent call last):
File "", line 1, in
ValueError: need more than 1 value to unpack
エラーになった。これは、sorted(h) がキーしか返さないからだ。
>>> for k in sorted(h):
... print k
...
a
b
c
d
e
キーと値がほしいときにはこうする。
>>> for k, v in sorted(h.items()):
... print k, v
...
a 200
b 300
c 500
d 100
e 400
辞書の items メソッドは、キーと値からなるタプルのリストを返してくれる。
>>> h.items()
[('a', 200), ('c', 500), ('b', 300), ('e', 400), ('d', 100)]
で、そのタプルの第1要素でソートされる。つまり辞書のキーでソートされるわけだ。 でも、今日やりたいのは値でソートすること。そのためには、sorted に key 引数を渡してやればいい。具体的にはこうする。
>>> for k, v in sorted(h.items(), key=lambda x: x[1]):
... print k, v
...
d 100
a 200
b 300
e 400
c 500
key 引数に渡しているのは、タプルの第2要素を返す関数だ。つまりこの関数の返り値でソートされるわけだな。
ちなみに、降順にするには、reverse=True を渡してやる。
>>> for k, v in sorted(h.items(), key=lambda x: x[1], reverse=True):
... print k, v
...
c 500
e 400
b 300
a 200
d 100
