Pythonで辞書をソートする方法には様々なものがあります。
キーでソートしたいのか、値でソートしたいのかで、いろいろな方法があります。
今回はそのいくつかを見ていきましょう!
Python で辞書を値でソートする
Pythonで辞書を値でソートしたい場合、いくつかの方法で実現できます。
方法1: ラムダを使った sorted() の使用 (Python 3.6 以降で推奨)
Python の新しいバージョン (Python 3.6 以上) では、 sorted()
メソッドにラムダを付けて辞書をソートすることができます。
ここでは、dict.items()
のキーをラムダで指定し、ソートしてみます。
my_dict = { 1 : 2 , 2 : 10 , "Hello" : 1234 }
print ({key: value for key, value in sorted (my_dict.items(), key = lambda item: item[ 1 ])})
|
結果は以下の通りです。
{ 1 : 2 , 2 : 10 , 'Hello' : 1234 }
|
確かに、新しい辞書が値に基づいてソートされたことがわかります!このメソッドはPythonで動作します。
このメソッドがPython 3.6+で動作する理由は、新しいバージョンのPythonでは辞書が順序付きデータ型になったからです。
つまり、項目のリストとして辞書を列挙することができ、さらにソートのような順序を変更できる操作を実行することができます。
しかし、恐れてはいけません。
もしあなたが古いバージョンのPythonを持っているなら、読み続けてください。
方法2: Pythonの古いバージョンでsorted()を使う
辞書をソートするために sorted()
を使用することは可能です。
しかし、辞書を順序型にする必要があります。
operatorモジュールは、
operator.itemgetter(idx)` を使って、その機能を備えています。
以下のスニペットは、辞書を値でソートします。
import operator
my_dict = { 1 : 2 , 2 : 10 , "Hello" : 1234 }
sorted_dict = sorted (my_dict.items(), key = operator.itemgetter( 1 ))
print (sorted_dict)
|
具体的には、 sorted(dict.items()
) を使ってソートされたリストを作成し、それに operator.itemgetter(1)
を渡します (値はインデックス 1 にあるので、1 でソートされます)。
これは、アイテムリストの最初の要素を取得する callable を作成します。
これを繰り返し行うことで、ソートされた辞書を得ることができます。
Python で辞書をキーでソートする
方法1: operator.itemgetter() を使う (古いバージョンの Python で推奨される方法)
さて、DictionaryをKeyでソートしたい場合は、前節と同様に operator
メソッドを使用します。
ただ、キーでソートするようになったので、 operator.itemgetter(0)
を呼び出します。
import operator
my_dict = { 2 : 10 , 1 : 2 , - 3 : 1234 }
# Sort the Dict based on keys sorted_dict = dict ( sorted (my_dict.items(), key = operator.itemgetter( 0 )))
print (sorted_dict)
|
結果は以下の通りです。
{ - 3 : 1234 , 1 : 2 , 2 : 10 }
|
確かに、辞書がKeyに基づいてソートされました。
方法2: ラムダを使ってsorted()を使う (Python 3.6+の推奨方法)
Pythonの新しいバージョンでは、ラムダを使った sorted()
メソッドを再び使用することができます。
ここでも前と同じですが、今度は値に基づいてソートするようにします。
my_dict = { 2 : 10 , 1 : 2 , - 3 : 1234 }
sorted_dict = dict ( sorted (my_dict.items(), key = lambda item: item[ 0 ]))
|
結果は以下の通りです。
{ - 3 : 1234 , 1 : 2 , 2 : 10 }
|
ここでも、出力は前と同じです。
まとめ
この記事では、Pythonで辞書をキーと値でソートする方法について学びました。