高校国語786851 views
小学社会309222 views
高校日本史190178 views
高校生物550643 views
いろは2999528 views
中学数学622525 views
中学社会667713 views
雑学1473151 views
英語610681 views
小学理科718465 views

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