🐍Python

Pythonで辞書を値(value)でソートする方法

Pythonで辞書(dict)を値(value)の大きさ順に並べたい場面はよくあります。sortedとlambdaを組み合わせれば簡単に実現できます。コピペで使える基本形と、昇順・降順の切り替えを押さえましょう。

d = {'a': 3, 'b': 1, 'c': 2}
sorted_items = sorted(d.items(), key=lambda x: x[1])
# 結果: [('b', 1), ('c', 2), ('a', 3)]
要素役割
d.items()キーと値のペアを取り出す
key=lambda x: x[1]値(2番目)で並べる指定
reverse=True降順にする(任意)

仕組みを理解する

itemsとlambdaがポイントです。

items()でペアにする
辞書をそのままソートするのでなく、items()でキーと値のペア(タプル)にしてから並べます。
lambdaで値を指定
key=lambda x: x[1] は「ペアの2番目(=値)を基準に並べる」という意味。x[0]にすればキーで並びます。
コツ:key=lambda x: x[1] の「1」が値、「0」がキーを表します。ここを変えるだけで、キー順・値順を切り替えられます。覚えておくと応用が利きます。

昇順・降順と辞書化

並び順や結果の形も調整できます。

# 降順にする
sorted_desc = sorted(d.items(), key=lambda x: x[1], reverse=True)
# 辞書に戻す
sorted_dict = dict(sorted_items)
  • 降順…reverse=True を加えると大きい順になる。
  • 辞書に戻す…dict() で囲むと辞書型に戻せる。
  • 結果はリスト…sortedの戻り値はタプルのリストになる。
注意:sortedの結果はタプルのリストであって辞書ではありません。辞書として使いたいときは dict() で囲んで変換します。元の辞書自体は変わらず、新しい並びが返る点も押さえましょう。

あわせて読みたい:Pythonでリストの重複を削除する方法(順序を保つ/保たない)ターミナルでファイルを名前で検索する方法(find)Pythonの記事一覧

まとめ

辞書を値でソートするにはsorted(d.items(), key=lambda x: x[1])。items()でペアにし、lambdaのx[1]で値を基準に並べます。x[0]ならキー順、reverse=Trueで降順です。結果はタプルのリストなので、辞書にしたいときはdict()で変換しましょう。

よくある質問

Pythonで辞書を値でソートするには?
sorted(d.items(), key=lambda x: x[1]) を使います。items()でキーと値のペアにし、lambdaのx[1]で値を基準に並べます。結果はタプルのリストです。
キーでソートする場合は?
key=lambda x: x[0] とします。x[0]がキー、x[1]が値を表すので、ここを変えるだけでキー順・値順を切り替えられます。
降順に並べるには?
reverse=True を加えます。sorted(d.items(), key=lambda x: x[1], reverse=True) とすると、値の大きい順に並びます。
ソート結果を辞書に戻すには?
dict() で囲みます。sortedの戻り値はタプルのリストなので、dict(sorted_items) とすると辞書型に戻せます。元の辞書自体は変わりません。