Python で辞書を値で並べ替える方法

Python 辞書を値で並べ替える方法を学びます。 sorted() を使用した並べ替え、カスタム キー ラムダ、および順序付けされた dict 構造の構築について説明します。

エディターでこのソリューションを試してください

概要

辞書は主に一意のキーを使用した素早い検索操作用に構築されていますが、多くの場合、値に基づいて辞書項目を並べ替える必要があります。たとえば、学生を試験の点数で並べ替えたり、製品を安いものから高いものまでリストしたり、単語数を頻度順に並べたりすることができます。

Python では、標準の辞書構造がリストのような順序付け方法をサポートしていないため、辞書をその場で直接並べ替えることはできません。代わりに、標準的なアプローチは、`.items()` メソッドを使用して辞書の項目をタプルとして取得し、組み込みの `sorted()` 関数とカスタム並べ替えキーを使用してそれらのタプルを並べ替え、その後並べ替えられた項目から辞書を再構築することです。

ソートキーは通常、タプルの 2 番目の要素 (辞書値) を返すラムダ関数です: `key=lambda item: item[1]`。Python 3.7 以降、標準辞書は挿入順序を保持します。 `dict()` コンストラクターを使用して、ソートされたタプルのリストを辞書に再キャストすると、反復可能なクリーンでソートされた辞書が返されます。

コードと実行の出力

このスクリプトは、ラムダ関数を使用してテスト スコアの辞書を値で昇順と降順に並べ替える方法を示します。

scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)

# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)

# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)

# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)
端子出力
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}

段階的な実装

  • my_dict.items() を呼び出して、キーと値のペアをタプルのリストとして取得します。
  • 辞書項目をsorted()関数に渡します。
  • key=lambda item: item[1] を指定して、sorted() 関数に値 (各タプルの 2 番目の要素) に基づいて並べ替えるよう指示します。
  • 項目を降順に並べ替えるには、オプションの引数として reverse=True を渡します。
  • ソートされたタプルのリストを dict() コンストラクターに渡して、ソートされた辞書を再構築します。

よくある質問

key=lambda item: item[1] とはどういう意味ですか?

sorted() 関数は、項目シーケンス ((キー, 値) のタプル) の各要素をラムダ関数に渡します。 item[1] は値コンポーネントを抽出し、タプルを値でソートするように Python に指示します。

辞書のソートはキーの検索速度に影響しますか?

いいえ、キー検索の平均時間計算量は O(1) のままです。これは、ソートによって変更されるのは反復シーケンスのみであり、基礎となるハッシュ テーブル構造は変更されないためです。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。