Pythonでsortedメソッドを使って辞書(dict)のソートをする方法

スポンサーリンク

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


タイトルとURLをコピーしました