嫁ちゃん
今回は辞書のソート(並び替え)ですね。
わたし
そうだね。ここでは sorted関数を使って実装します。 辞書のソート(並び替え)も覚えてしまえば、そんなに難しくないので、ここで一緒に学びましょう!
目次
辞書とは?
辞書は他の言語にも “連想記憶 (associated memory)” や “連想配列 (associative array)” という名前で存在することがあります。ある範囲の数でインデクス化されているシーケンスと異なり、辞書は キー (key) でインデクス化されています。このキーは何らかの変更不能な型になります。文字列、数値は常にキーにすることができます。タプルは、文字列、数値、その他のタプルのみを含む場合はキーにすることができます。
5.5. 辞書型 (dictionary) – Python3.8.1 ドキュメント
こちらも合わせてご覧ください。
>>>【Python】辞書操作:辞書の作成
>>>【Python】辞書操作:キーと値の存在チェックと検索
>>>【Python】辞書操作:要素の追加・変更
>>>【Python】辞書操作:要素の削除
辞書の要素をソート(並び替え)
sorted関数 の引数に辞書のみを指定した場合
dic = {'key99': 99, 'key1': 1, 'key2': 2, 'key3': 3}
dic1 = sorted( dic )
print( dic1 )
dic2 = sorted( dic, reverse=True )
print( dic2 )
['key1', 'key2', 'key3', 'key99'] #<-- 昇順
['key99', 'key3', 'key2', 'key1'] #<-- 降順
sorted
の引数に辞書を渡すだけだと、キー項目だけのリストが出来上がります。引数で渡した辞書には変更は加えられません。
sorted関数の引数に辞書の items() を指定した場合
dic = {'key99': 99, 'key1': 1, 'key2': 2, 'key3': 3}
dic1 = sorted( dic.items() )
print( dic1 )
dic2 = sorted( dic.items(), reverse=True )
print( dic2 )
[('key1', 1), ('key2', 2), ('key3', 3), ('key9', 99)] #<-- 昇順
[('key9', 99), ('key3', 3), ('key2', 2), ('key1', 1)] #<-- 降順
sorted
の引数に辞書の items() を渡すと、キー項目で並び替えられたタプルのリストが出来上がります。引数で渡した辞書には変更は加えられません。
sorted関数の引数に 無名関数 lambda を記述して key で並び替える
dic = {
'key9': 99,
'key1': 1,
'key2': 2,
'key3': 3
}
dic1 = sorted( dic.items(), key=lambda x:x[0] )
print( dic1 )
dic2 = sorted( dic.items(), key=lambda x:x[0], reverse=True )
print( dic2 )
[('key1', 1), ('key2', 2), ('key3', 3), ('key9', 99)]
[('key9', 99), ('key3', 3), ('key2', 2), ('key1', 1)]
keyで並び替え(昇順、降順)ができましたね。
sorted関数の引数に 無名関数 lambda を記述して value で並び替える
dic = {
'key9': -1,
'key1': 1,
'key2': 2,
'key3': 3
}
dic1 = sorted( dic.items(), key=lambda x:x[1] )
print( dic1 )
dic2 = sorted( dic.items(), key=lambda x:x[1], reverse=True )
print( dic2 )
[('key9', -1), ('key1', 1), ('key2', 2), ('key3', 3)]
[('key3', 3), ('key2', 2), ('key1', 1), ('key9', -1)]
valueで並び替え(昇順、降順)ができましたね。
嫁ちゃん
無名関数 lambda って難し感じがしますね。
わたし
関数定義を省略した記述になるので、関数定義の手間は省けるけど、慣れないとどういったコードが書かれているのかわからなくなってしまうね。少しずつ学んでいこうね。
[A8_TechAcademy065]
[Footer]