Python Tips: dict(辞書)型の中身をソートしたい

Python の dict 型のオブジェクトをキーやバリューでソートしてから取り出す方法についてご紹介します。

シンプルでかんたんなのは sorted() 関数に key オプションを渡す方法です。

公式ドキュメントによると sorted() 関数の宣言部は次のとおりとされています。

sorted(iterable, *, key=None, reverse=False)

サンプルとして、次のような辞書 d をソートする場合を見てみましょう。

d = {
    'Tokyo': 10,
    'Osaka': 3,
    'Hokkaido': 12,
}

キーでソートするなら次のとおりにします。

sorted(d.items(), key=lambda x: x[0])
# => [('Hokkaido', 12), ('Osaka', 3), ('Tokyo', 10)]

バリューでソートするなら次のとおりにします。

sorted(d.items(), key=lambda x: x[1])
# => [('Osaka', 3), ('Tokyo', 10), ('Hokkaido', 12)]

lambda のところがこれではわかりづらければ、例えば次のように書いてもよいかと思います。

sorted(d.items(), key=lambda k, v: v)
# => [('Osaka', 3), ('Tokyo', 10), ('Hokkaido', 12)]

さらに別解として、 Python 本体に同梱の operator ライブラリの itemgetter() 関数を使えば、同様の処理を次のように書くこともできます。

from operator import itemgetter
sorted(d.items(), key=itemgetter(0))
# => キーでソートした結果

参考