Pythonの辞書をキーまたは値でソートする(並び替える):sortedとラムダ式を使う
2019.11.27
Python の辞書をキーまたは値で並び替えるときは sorted を使います。
辞書をキーで並び替える
d = {'Netflix': 308, 'Apple': 265, 'Facebook': 196}
a = sorted(d.items())
b = sorted(d.items(), reverse=True)
print(a) # [('Apple', 265), ('Facebook', 196), ('Netflix', 308)]
print(b) # [('Netflix', 308), ('Facebook', 196), ('Apple', 265)]
print(type(a)) # <class 'list'>
print(type(a[0])) # <class 'tuple'>
辞書をキーで並び替えるときは、まず辞書を dict_items というリストに似たものにして、それを sorted に入れます。デフォルトは昇順、reverse=True のオプションで降順になります。
a はちゃんと Apple から始まり、昇順に Facebook、Netflix と続いています。逆に b はアルファベットで降順になっています。
ソート後はもとの辞書でなく、タプルを要素とするリストになることに注意してください。
辞書を値で並び替える
d = {'Netflix': 308, 'Apple': 265, 'Facebook': 196}
a = sorted(d.items(), key=lambda i: i[1])
b = sorted(d.items(), key=lambda i: i[1], reverse=True)
print(a) # [('Facebook', 196), ('Apple', 265), ('Netflix', 308)]
print(b) # [('Netflix', 308), ('Apple', 265), ('Facebook', 196)]
値をもとに並び替えるときは key にラムダ式を使います。それ以外はキーによるソートと変わりません。
ちなみにラムダ式の 1 を 0 にするとキーによるソートになります。
d = {'Netflix': 308, 'Apple': 265, 'Facebook': 196}
a = sorted(d.items(), key=lambda i: i[0])
b = sorted(d.items(), key=lambda i: i[0], reverse=True)
print(a) # [('Apple', 265), ('Facebook', 196), ('Netflix', 308)]
print(b) # [('Netflix', 308), ('Facebook', 196), ('Apple', 265)]
items の中身を調べる
上のコードで、辞書を dict_items にして並び替えていますが、この dict_items はタプルのリストに近いものです。
print(d.items())
# dict_items([('Netflix', 308), ('Apple', 265), ('Facebook', 196)])
print(type(d.items()))
# <class 'dict_items'>
しかし dict_items はリストではなく、下のようにインデックスを指定してタプルを取りだすことはできません。
d.items()[0]
TypeError: 'dict_items' object is not subscriptable