Pythonでリストの中にある辞書の値でソートする方法

2013-06-05
このエントリーをはてなブックマークに追加

リストをソートするだけなら簡単なんですけど、リストの要素が辞書で、その辞書の値でソートしたい時はちょっと面倒だったのでメモ。面倒っていってもたかが知れてるというか、ハセテツ的に面倒だっただけですけど。

_d = [
    {
        'member': 'aaa',
        'score': 500,
    },
    {
        'member': 'bbb',
        'score': 300,
    },
    {
        'member': 'ccc',
        'score': 100,
    },
    {
        'member': 'ddd',
        'score': 200,
    },
    {
        'member': 'eee',
        'score': 400,
    }
]

aaaさんからeeeさんがいて、それぞれ点数がscoreで表されてる時にscoreの高い順、低い順でソートします。

_asc = sorted(_d, key=lambda member: member['score'])
for item in _asc:
    print item['member'], item['score']

print '-------------------'

_desc = sorted(_d, key=lambda member: member['score'], reverse=True)
for item in _desc:
    print item['member'], item['score']

出力されるのは以下になります。

ccc 100
ddd 200
bbb 300
eee 400
aaa 500
——————-
aaa 500
eee 400
bbb 300
ddd 200
ccc 100

reverse=Trueをつければ降順だし、つけなければ昇順です。覚えておくと便利です。
Tags: