Pythonで辞書のリストを要素でソートする

今回はPythonの辞書を要素でソートする方法について説明します。様々な方法がありますが、sorted 関数を使うことで簡単にできます。

辞書のkeyのみをソートする

sorted 関数は、引数に辞書を渡すとkeyのみをソートしたリストを返します。

dic1 = {"banana":200, "apple":150, "orange":100, "melon":300}
dic2 = sorted(dic1)
print dic2 
# ['apple', 'banana', 'melon', 'orange']

キーでソートする

items() メソッドは、辞書の(key, value)タプルを要素としたリストを返します。sorted 関数にdic.items() を引数として渡すことで、keyでソートした辞書要素( (key, value) のタプル)のリストを返します。

dic1 = {"banana":200, "apple":150, "orange":100, "melon":300}
dic2 = sorted(dic1.items())
print dic2 
# [('apple', 150), ('banana', 200), ('melon', 300), ('orange', 100)]

値でソートする

valueでソートしたい場合は、次のように無名関数を使います。

dic1 = {"banana":200, "apple":150, "orange":100, "melon":300}
dic2 = sorted(dic1.items(), key=lambda x:x[1])
print dic2 
# [('orange', 100), ('apple', 150), ('banana', 200), ('melon', 300)]

lambda x:x[1] は、引数 x( dic.items()で得られたリストの各要素、すなわち、(key, value) のタプル)を受け取りx[1](value)を返します。ここでは、返り値を key にセットすることで、value をキーにソートしています。

降順でソートする

降順でソートするには、reverse オプションを True に設定します。key で降順にソートする例を示します。

dic1 = {"banana":200, "apple":150, "orange":100, "melon":300}
dic2 = sorted(dic1.items(), reverse=True)
print dic2 
# [('orange', 100), ('melon', 300), ('banana', 200), ('apple', 150)]