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

Pythonのitemgetterを使って辞書のリストを値でソートする方法


辞書(dict)のリストを、特定のキーの値に基づいて並べ替えたい場面はよくあります。そんなときは、標準ライブラリ operator モジュールの itemgetter を使うことで、簡潔かつ効率的にソートできます。

以下に具体的な使用例を示します。

サンプルコード

from operator import itemgetter

my_list = [{ "name" : "Will", "age" : 56},
          { "name" : "Rob", "age" : 20 },
          { "name" : "Mark" , "age" : 34 },
          { "name" : "John" , "age" : 24 }]

print("年齢でソートしたリスト : ")
print(sorted(my_list, key=itemgetter('age')))

print("年齢と名前でソートしたリスト : ")
print(sorted(my_list, key=itemgetter('age', 'name')))

print("年齢で降順にソートしたリスト : ")
print(sorted(my_list, key=itemgetter('age'), reverse = True))

実行結果

年齢でソートしたリスト :
[{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will',
'age': 56}]
年齢と名前でソートしたリスト :
[{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will',
'age': 56}]
年齢で降順にソートしたリスト :
[{'name': 'Will', 'age': 56}, {'name': 'Mark', 'age': 34}, {'name': 'John', 'age': 24}, {'name': 'Rob',
'age': 20}]

コードの解説

  • まず、operator モジュールから itemgetter をインポートします。

  • 辞書要素を持つリストを定義し、コンソールに表示します。

  • sorted() 関数の key 引数に itemgetter('age') を指定すると、「age」キーの値を基準に昇順でソートされます。

  • itemgetter('age', 'name') のように複数のキーを渡すと、第1キーが同じ場合に第2キーで比較される多段ソートが可能になります。

  • reverse=True を指定することで、降順での並べ替えも簡単に行えます。

  • それぞれのソート結果がコンソールに出力されます。

補足:itemgetterとlambda式の違い

key=lambda x: x['age'] のようにラムダ式を使っても同様のソートは可能ですが、itemgetter はC言語レベルで実装されているため処理が高速で、複数キーの指定も引数を並べるだけで済むため可読性にも優れています。大量のデータを扱う場合や、パフォーマンスが求められる場面では itemgetter の利用がおすすめです。

  1. Pythonで辞書の値をキーにして辞書のリストを並べ替える方法

    sorted()関数を使った辞書リストのソートPythonには、イテラブル(反復可能オブジェクト)の要素を指定した順序で並べ替えるための組み込み関数 sorted() が用意されています。sorted(iterable[, key][, reverse])第2引数の key には関数を指定します。この関数の戻り値が、ソート時の比較キーとして使用されます。第3引数の reverse はデフォルトで False になっており、True を指定すると降順(大きい順)に並べ替えられます。lambda式でソートキーを指定する辞書のリストを並べ替える場合は、lambda式を使って「各辞書の特定のキーの値」

  2. Pythonのループでリストに値を追加・代入する方法【append()活用】

    Pythonのループを使ってリストに値を追加する方法 Pythonの組み込みクラスであるlistには、要素を末尾に追加するためのappend()メソッドが用意されています。このメソッドとinput()関数、さらに無限ループ(while True)を組み合わせることで、ユーザーが入力した値を次々とリストに格納することができます。 以下のサンプルコードでは、ユーザーが何も入力せずにEnterキーを押すまで、繰り返し項目の入力を受け付け、その都度リストへ追加していきます。 L = [] while True: item = input(新しい項目を入力してください: ) if ite