今回は、Pythonで辞書を値でソートする手順を公開します。
Python のテクニック1: sorted() 関数を使って辞書を値順に並べ替える
Pythonの operator.itemgetter() メソッド
と共に `sorted() メソッドを使用すると、Pythonで辞書を値順に並べ替えることができます。
Pythonのoperatorモジュールには、データや値を操作するための様々な関数が組み込まれています。
operator.itemgetter(m) メソッドは、入力オブジェクトをイテレート可能なものとみなし、イテレート可能なものからすべての ‘m’ 値を取り出します。
構文は以下の通りです。
operator.itemgetter(value) |
Python sorted() メソッドは、dict を昇順/降順にソートします。
構文 Python sorted() メソッド
sorted (iterable, key)
|
-
iterable
: ソートされる要素を表します。 -
key
(オプション): 要素のソート順を決定する関数。
例えば、以下の様になります。
from operator import itemgetter
inp_dict = { 'a' : 3 , 'ab' : 2 , 'abc' : 1 , 'abcd' : 0 }
print ( "Dictionary: " , inp_dict)
sort_dict = dict ( sorted (inp_dict.items(), key = operator.itemgetter( 1 )))
print ( "Sorted Dictionary by value: " , sort_dict)
|
上記の関数では、パラメータ key = operator.itemgetter(1) を設定しています。
なぜなら、ここでは ‘1’ が dict の値を表し、 ‘0’ が dict のキーを表しているからです。
このように、dictを値の昇順でソートしています。
出力です。
Dictionary: { 'a' : 3 , 'ab' : 2 , 'abc' : 1 , 'abcd' : 0 }
Sorted Dictionary by value: { 'abcd' : 0 , 'abc' : 1 , 'ab' : 2 , 'a' : 3 }
|
この記事もチェック:Pythonによるバブルソートの昇順、降順の実装方法とコードを解説する
テクニック2:Pythonのラムダ関数とsorted()メソッドの併用
Pythonのsorted()メソッドは、ラムダ関数と組み合わせることで、Pythonの辞書を値ごとにあらかじめ定義された順序でソートすることができます。
Pythonのラムダ関数は、無名関数、すなわち名前のない関数を作成します。
これは、コードの最適化に役立ちます。
構文 Pythonラムダ関数
lambda arguments: expression
|
例えば、以下の様になります。
inp_dict = { 'a' : 3 , 'ab' : 2 , 'abc' : 1 , 'abcd' : 0 }
print ( "Dictionary: " , inp_dict)
sort_dict = dict ( sorted (inp_dict.items(), key = lambda item: item[ 1 ]))
print ( "Sorted Dictionary by value: " , sort_dict)
|
上記のコードでは、ラムダ関数を作成し、引数としてdictの値を渡しています。
dictをitem[1]のように値で反復処理することで、dictの値を渡しています。
出力は以下の通りです。
Dictionary: { 'a' : 3 , 'ab' : 2 , 'abc' : 1 , 'abcd' : 0 }
Sorted Dictionary by value: { 'abcd' : 0 , 'abc' : 1 , 'ab' : 2 , 'a' : 3 }
|
この記事もチェック:NumPyでソート(並び替え)処理をするのに便利なメソッド3つ
テクニック3:Python sorted()メソッドとdict.items()の併用
Python の sorted() 関数は、dict.items() メソッドに値を渡すことで、Python で辞書を値でソートするために使用できます。
dict.items() メソッドは、辞書からキーや値を取得します。
構文は以下の通りです。
dict .items()
|
例えば、以下の様になります。
inp_dict = { 'a' : 3 , 'ab' : 2 , 'abc' : 1 , 'abcd' : 0 }
print ( "Dictionary: " , inp_dict)
sort_dict = dict ( sorted ((value, key) for (key,value) in inp_dict.items()))
print ( "Sorted Dictionary by value: " , sort_dict)
|
上記のコードでは、(value,key) のペアを sorted 関数に渡し、 dict.items() メソッドを使って dict の値を取得しています。
この場合、出力としてソートされた (value,key) のペアを受け取ることになります。
出力です。
Dictionary: { 'a' : 3 , 'ab' : 2 , 'abc' : 1 , 'abcd' : 0 }
Sorted Dictionary by value: { 0 : 'abcd' , 1 : 'abc' , 2 : 'ab' , 3 : 'a' }
|
まとめ
この記事では、Pythonで辞書を値でソートするさまざまな方法について理解しました。
参考文献
- Pythonのdictを値でソートする – JournalDev