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']