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

Pythonで辞書のリストを値でソートする方法|sorted関数とlambdaの使い方

本記事では、複数の辞書を格納したリストを、各辞書が持つ値(value)に基づいて並べ替える方法を解説します。

サンプルとして使う辞書には、「name(名前)」と「roll(出席番号)」という2つのキーが含まれています。まずはPythonの組み込み関数 sorted() とラムダ式(lambda)を組み合わせて、roll の値で昇順にソートした結果を表示します。

続いて、name と roll の両方を組み合わせた条件でのソート、そして roll の値で降順にソートする方法まで、順番に見ていきましょう。

サンプルコード

# 辞書のリストを初期化 
my_list1 = [{ "name" : "Adwaita", "roll" : 100},
{ "name" : "Aadrika", "roll" : 234 },
{ "name" : "Sakya" , "roll" : 23 }]
print ("The list is sorted by roll: ")
print (sorted(my_list1, key = lambda i: i['roll']) )
print ("\r")
print ("The list is sorted by name and roll: ")
print (sorted(my_list1, key = lambda i: (i['roll'], i['name'])) )
print ("\r")
print ("The list is sorted by roll in descending order: ")
print (sorted(my_list1, key = lambda i: i['roll'],reverse=True) )

実行結果

The list is sorted by roll: 
[{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
The list is sorted by name and roll: 
[{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
The list is sorted by roll in descending order: 
[{'name': 'Aadrika', 'roll': 234}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Sakya', 'roll': 23}]

コードのポイント解説

1. sorted() 関数と key 引数

sorted() 関数は、元のリストを変更せずに、新しいソート済みリストを返します。key 引数には「比較に使う値を取り出す関数」を指定します。ここではラムダ式 lambda i: i['roll'] を渡すことで、各辞書から 'roll' の値を取り出し、その値を基準に昇順ソートを行っています。

2. 複数のキーでソートする方法

複数条件で並べ替えたい場合は、ラムダ式でタプル (i['roll'], i['name']) を返します。この場合、まず roll の値で比較され、値が同じ要素同士は次に name の順序で並べ替えられます。

3. 降順でソートする方法

降順(大きい順)に並べ替えたいときは、sorted()reverse=True を指定するだけです。上記の出力例では、roll の値が大きい順に表示されていることが確認できます。

補足:operator.itemgetter を使う方法

ラムダ式の代わりに、標準ライブラリの operator.itemgetter を使うこともできます。こちらの方がやや高速で、可読性が高いとされています。

from operator import itemgetter

# roll の値でソート
sorted(my_list1, key=itemgetter('roll'))

# roll → name の順でソート
sorted(my_list1, key=itemgetter('roll', 'name'))

状況に応じて、ラムダ式と itemgetter を使い分けるとよいでしょう。

  1. Pythonで2つの辞書をマージするプログラムの書き方

    この記事では、Pythonを使って2つの辞書(ディクショナリ)を1つに結合(マージ)するプログラムを紹介します。辞書の結合には、組み込みメソッドである update() を使用します。update() メソッドは、引数に渡した辞書の要素を呼び出し元の辞書へ追加することで、2つの辞書を統合できます。 なお、update() の戻り値は None です。つまり新しい辞書が生成されるわけではなく、既存の辞書そのものが直接更新されるという点に注意してください。 実行例 入力:: A = {AAA: 10} B = {BBB: 20} 出力:: C = {BBB: 20, AAA: 10} アルゴリ

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

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