Python の辞書を昇順・降順にソートする
Python の辞書を値で昇順・降順にするには、sorted と lambda を使います。
pairs = {'A': 5, 'B': 1, 'C': 3}
asc = sorted(pairs.items(), key=lambda pair: pair[1])
desc = sorted(pairs.items(), key=lambda pair: pair[1], reverse=True)
print(asc)
# [('B', 1), ('C', 3), ('A', 5)]
print(desc)
# [('A', 5), ('C', 3), ('B', 1)]
pair は辞書のキーと値のペア、pair[1] は値を表します。pair[1] を pair[0] にすると、辞書のキーでソートされます。
pairs = {'A': 5, 'B': 1, 'C': 3}
asc = sorted(pairs.items(), key=lambda pair: pair[0])
desc = sorted(pairs.items(), key=lambda pair: pair[0], reverse=True)
print(asc)
# [('A', 5), ('B', 1), ('C', 3)]
print(desc)
# [('C', 3), ('B', 1), ('A', 5)]
補足:エラー例
sorted の対象を辞書そのものにしてもうまくいかない。
pairs = {'A': 5, 'B': 1, 'C': 3}
asc = sorted(pairs, key=lambda pair: pair[1])
# IndexError: string index out of range
この場合、lambda で使われる要素は辞書のキーです。
pairs = {'A': 5, 'B': 1, 'C': 3}
desc = sorted(pairs, key=lambda pair: pair, reverse=True)
print(desc)
# ['C', 'B', 'A']