Python で辞書をキーで並べ替える方法
Azaz Farooq
2023年10月10日
-
Python で辞書をキーでソートする
dict.keys()
メソッド -
Python の
dict.items()
メソッドで辞書をキーでソートする -
Python の
OrderedDict()
メソッドで辞書をキーでソートする - Python で辞書を逆順に並べ替える
-
カスタム
key
関数メソッドを用いた Python の辞書のソート
Python の辞書は、キーのハッシュを評価してエントリを保持するハッシュテーブルと同じで、エントリの並びが予想できません。この記事では、Python で辞書をキーでソートする方法を紹介します。
Python で辞書をキーでソートする dict.keys()
メソッド
以下の辞書を例にしてみよう。
dict = {"hello": 56, "at": 23, "test": 43, "this": 43}
dict.keys()
の出力は
dict_keys(["hello", "at", "test", "this"])
この順序のないキーのリストから、新しい順序付きの辞書を作ることができます。
sorted(dict.keys())
出力:
['at', 'hello', 'test', 'this']
辞書から各エントリを選択することで、この順序付きリストにソートを繰り返し適用します。
for key in sorted(dict.keys()):
print(key, " :: ", dict[key])
出力:
at :: 23
hello :: 56
test :: 43
this :: 43
Python の dict.items()
メソッドで辞書をキーでソートする
Python の dict.items()
メソッドを使って辞書をキーでソートすることもできます。
これはキーと値のペアを保持するリストを生成します。
dict.items()
出力:
dict_items([('hello', 56), ('at', 23), ('test', 43), ('this', 43)])
以下の関数で整理リストを作成することができます。辞書のエントリをキーの値に応じてソートしてくれる。
sorted(dict.keys())
出力:
['at', 'hello', 'test', 'this']
さて、辞書からソートされたキーと値のペアを生成するには、次のコードを使用します。
for elem in sorted(dict.items()):
print(elem[0], " ::", elem[1])
出力:
at :: 23
hello :: 56
test :: 43
this :: 43
複雑さの点では、前のアプローチよりも強力です。dict.key()
のように、反復可能なリストをソートした後にキー値をチェックする必要がないからです。
Python の OrderedDict()
メソッドで辞書をキーでソートする
あるいは、collections
モジュールを使って辞書の項目をキー値でソートすることもできます。
import collections
d = {2: 13, 1: 9, 4: 25, 3: 0}
result = collections.OrderedDict(sorted(d.items()))
print(result)
出力:
OrderedDict([(1, 9), (2, 13), (3, 0), (4, 25)])
Python で辞書を逆順に並べ替える
前回までは、辞書の項目を昇順に並べ替えました。今回は、辞書の項目を降順に並べ替える方法について説明します。
構文は以下の通りです。
sorted(iterable_sequence, reverse=True)
以下のコードは、辞書の項目をソートして反転させる。
dict = {"hello": 56, "at": 23, "test": 43, "this": 43}
for elem in sorted(dict.items(), reverse=True):
print(elem[0], " ::", elem[1])
パラメータ reverse=true
は、ソートされた辞書が反転されることを確認します。
出力:
this :: 43
test :: 43
hello :: 56
at :: 23
カスタム key
関数メソッドを用いた Python の辞書のソート
このメソッドは key
の文字列の長さを用いて辞書の項目をソートします。
sorted(iterable_sequence, key=Function)
パラメータ key
には文字列のサイズを返す関数 lambda
が与えられます。
listofTuples = sorted(dict.items() , key=lambda x: len (x[0] ) )
for elem in listofTuples :
print(elem[0] , " ::" , elem[1] )
出力:
at :: 23
test :: 43
this :: 43
hello :: 56