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 リソース
関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。
Python ループ
Python ループを使用してデータを反復処理する方法を学びます。インタラクティブな例を使用して、for ループ、while ループ、ブレーク、継続、ループのベスト プラクティスをマスターします。
Python 辞書メソッドのチートシート
Python の辞書メソッドを学習します。キーと値のペアの挿入、取得、更新、チェックに関する完全なリファレンス ガイド。
Python vs Ruby: スクリプト、Web フレームワーク、哲学
Python と Ruby を比較します。彼らの哲学、構文の優雅さ、Web フレームワーク (Djangoと Rails)、および実行スタイルの微妙な違いを学びましょう。