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))
# => キーでソートした結果
参考