Python:キーの値のi番目の文字に基づいて辞書リストをソートする方法
辞書のリストを、特定のキーに対応する値の「i番目」の文字(インデックス)に基づいて並べ替えたいケースはよくあります。そのような場合は、Pythonの組み込み関数である sorted() とラムダ式(lambda)を組み合わせることで、非常に簡潔に実現できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = [{"Python" : "Best", "to" : "Code"},
{"Python" : "Good", "to" : "Learn"},
{"Python" : "object", "to" : "cool"},
{"Python" : "oriented", "to" : "language"}]
print("The list is : ")
print(my_list)
K = "Python"
print("The value of K is ")
print(K)
i = 2
print("The value of i is :")
print(i)
my_result = sorted(my_list, key = lambda sub: sub[K][i])
print("The resultant list is : ")
print(my_result)
実行結果
The list is :
[{'Python': 'Best', 'to': 'Code'}, {'Python': 'Good', 'to': 'Learn'}, {'Python': 'object', 'to': 'cool'},
{'Python': 'oriented', 'to': 'language'}]
The value of K is
Python
The value of i is :
2
The resultant list is :
[{'Python': 'oriented', 'to': 'language'}, {'Python': 'object', 'to': 'cool'}, {'Python': 'Good', 'to':
'Learn'}, {'Python': 'Best', 'to': 'Code'}]
処理の流れと解説
まず、複数の辞書を要素とするリストを作成し、コンソールに表示します。
並べ替えの基準となるキー名「K」(ここでは "Python")を定義し、コンソールに表示します。
参照する文字の位置「i」(ここでは 2)を定義し、コンソールに表示します。
sorted()関数の引数keyにラムダ式を渡してリストを並べ替えます。ラムダ式内のsub[K][i]によって、各辞書からキー K の値を取り出し、その i 番目の文字が比較用のキーとして使用されます。並べ替えられた新しいリストは変数に代入されます。なお、
sorted()は元のリストを変更せず、新しいリストを返す点にも注目してください。最後に、その変数の内容をコンソールに出力します。
この手法を使えば、文字列だけでなくタプルやリストなど、インデックスアクセス可能な値であれば同じ考え方で柔軟に並べ替えが可能です。降順にしたい場合は、sorted() の引数に reverse=True を追加するだけです。
-
Pythonでタプルのリストを辞書に変換する方法を解説
Pythonでは、キーと値のペアを持つタプルのリストを、簡単に辞書(dict)へ変換できます。本記事では、setdefault()メソッドやdict()コンストラクタを使った変換方法を、具体例とともにわかりやすく解説します。 変換のイメージ まずは、どのような変換が行われるのかを見てみましょう。タプルのリストの各要素の第1引数が辞書の「キー」に、第2引数が「値」に対応します。 入力: [(Adwaita, 5), (Aadrika, 5), (Babai, 37), (Mona, 7), (Sanj, 25), (Sakya, 30)] 出力: {Adwaita: 5, Aadr
-
Pythonの辞書(dict)を値で並べ替える方法
Pythonの辞書を値でソートする基本 Pythonの標準ライブラリには、高性能なコンテナデータ型を提供する collections モジュールが含まれています。その中の OrderedDict は辞書のサブクラスで、要素が追加された順序を記憶できるのが特徴です。順序付き辞書を反復処理すると、キーが最初に追加された順番どおりに項目が返されます。 >>> from collections import OrderedDict >>> D = {5:fff, 3:ttt, 1:ooo, 4:bbb, 2:ddd} >>> OrderedDict