Pythonで辞書の値をキーにして辞書のリストを並べ替える方法
sorted()関数を使った辞書リストのソート
Pythonには、イテラブル(反復可能オブジェクト)の要素を指定した順序で並べ替えるための組み込み関数 sorted() が用意されています。
sorted(iterable[, key][, reverse])
第2引数の key には関数を指定します。この関数の戻り値が、ソート時の比較キーとして使用されます。第3引数の reverse はデフォルトで False になっており、True を指定すると降順(大きい順)に並べ替えられます。
lambda式でソートキーを指定する
辞書のリストを並べ替える場合は、lambda式を使って「各辞書の特定のキーの値」をソートキーとして返すのが一般的です。
次の例では、辞書のリストを、指定したキーに関連付けられた値の昇順に並べ替えています。
>>> dictlist=[{'name':'Rahul', 'age':23, 'marks':60}, {'name':'Anil', 'age':18, 'marks':55}, {'name':'Sunil', 'age':21, 'marks':90}]
>>> newlist=sorted(dictlist, key = lambda k:k['name'])
>>> newlist
[{'name': 'Anil', 'age': 18, 'marks': 55}, {'name': 'Rahul', 'age': 23, 'marks': 60}, {'name': 'Sunil', 'age': 21, 'marks': 90}]
>>> newlist=sorted(dictlist, key = lambda k:k['age'])
>>> newlist
[{'name': 'Anil', 'age': 18, 'marks': 55}, {'name': 'Sunil', 'age': 21, 'marks': 90}, {'name': 'Rahul', 'age': 23, 'marks': 60}]
>>> newlist=sorted(dictlist, key = lambda k:k['marks'], reverse=True)
>>> newlist
[{'name': 'Sunil', 'age': 21, 'marks': 90}, {'name': 'Rahul', 'age': 23, 'marks': 60}, {'name': 'Anil', 'age': 18, 'marks': 55}]実行結果のポイント
- 'name'キーでソート: 名前がアルファベット順(Anil → Rahul → Sunil)に並びます。
- 'age'キーでソート: 年齢が昇順(18 → 21 → 23)に並びます。
- 'marks'キーで降順ソート:
reverse=Trueを指定することで、点数が高い順(90 → 60 → 55)に並びます。
operator.itemgetterを使う方法
lambda式の代わりに、標準ライブラリの operator.itemgetter を使うと、より簡潔に記述できます。
from operator import itemgetter
newlist = sorted(dictlist, key=itemgetter('age'))itemgetter('age') は、各辞書から 'age' の値を取り出す関数を生成するため、lambda式と同じ動作になります。複数のキーを組み合わせたソート(例:itemgetter('age', 'name'))にも対応できるのが利点です。
-
Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】
Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll
-
Pythonで辞書のすべての値を取得・出力する方法
Pythonの辞書(dict)オブジェクトには、すべての値を簡単に取得できるvalues()メソッドが標準で用意されています。このメソッドを呼び出すと、辞書に格納された全ての値が dict_values オブジェクトとして返されます。values()メソッドを使う基本的な方法以下の例では、辞書 D1 のすべての値を values() メソッドで取得しています。戻り値はビューオブジェクトのため、リストとして扱いたい場合は list() 関数で変換すると便利です。>>> D1 = {1:a, 2:b, 3:c} >>> D1.values() dict_valu