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 keyssorted_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で辞書をキーと値でソートする方法について学びました。