Pythonで複数の要素をまとめて格納するときに、リストや辞書を使用すると思います。
要素をある条件でソートするには、sortやsortedを使いますが、辞書の場合は少し工夫が必要です。
目次
Python辞書のソート方法
下記のような辞書を作ります。
d = {'Osaka': 6, 'Tokyo': 3, 'Kanagawa': 4}
辞書型はそのままsortするとエラーになります。
d.sort()
print(d) # AttributeError: 'dict' object has no attribute 'sort'
sortedでソートすると、キーで並び替えられたリストになります。
sorted_d = sorted(d)
print(sorted_d) # ['Kanagawa', 'Osaka', 'Tokyo']
辞書をソートするには、そのままではなく一度items()でキーと値をすべて取り出します。
d2 = d.items()
print(d2)
# dict_items([('Osaka', 6), ('Tokyo', 3), ('Kanagawa', 4)])
(key, value)がタプルになった形で取り出すことができます。
型はdict_items型になります。リストに変換することができます。
この形で、sortedを使用すると中身が残ったまま、並び替えができます。
sorted_d2 = sorted(d.items())
print(sorted_d2)
# [('Kanagawa', 4), ('Osaka', 6), ('Tokyo', 3)]
lambdaを使って辞書を並び替える方法
辞書にあるkeyやvalueを使ってソートする方法として、lambdaがあります。
sortedの引数keyの部分に「lambda式」を入れてあげます。
公式ドキュメントのsortedの式はこちら。
sorted(iterable, *, key=None, reverse=False)
keyにlambda式を入れたものです。
インデックスでkeyとvalueを分けます。
# keyで並び替える
sorted_d3 = sorted(d.items(), key=lambda x:x[0]) # インデックス0
print(sorted_d3)
# [('Kanagawa', 4), ('Osaka', 6), ('Tokyo', 3)]
# valueで並び替える
sorted_d3 = sorted(d.items(), key=lambda x:x
) # インデックス1
print(sorted_d3)
# [('Tokyo', 3), ('Kanagawa', 4), ('Osaka', 6)]
sortedで並び替えた辞書はタプルのリストになっています。