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) とすると辞書型に戻せます。元の辞書自体は変わりません。