Python
 Computer >> コンピューター >  >> プログラミング >> Python

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'))にも対応できるのが利点です。

  1. Pythonで辞書(dict)を値で並べ替える方法【OrderedDictとsorted()活用】

    Pythonで辞書を値順にソートする基本の考え方 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書型のサブクラスで、要素が追加された順序を記憶できるのが特徴です。通常の dict もPython 3.7以降は挿入順を保持しますが、明示的に順序を扱いたい場面では OrderedDict が便利です。 OrderedDict をイテレートすると、キーが最初に追加された順序どおりにアイテムが返されます。 OrderedDictの基本的な使い方 >>> from coll

  2. Pythonで辞書のすべての値を取得・出力する方法

    Pythonの辞書(dict)オブジェクトには、すべての値を簡単に取得できるvalues()メソッドが標準で用意されています。このメソッドを呼び出すと、辞書に格納された全ての値が dict_values オブジェクトとして返されます。values()メソッドを使う基本的な方法以下の例では、辞書 D1 のすべての値を values() メソッドで取得しています。戻り値はビューオブジェクトのため、リストとして扱いたい場合は list() 関数で変換すると便利です。>>> D1 = {1:a, 2:b, 3:c} >>> D1.values() dict_valu