【Python】辞書操作:要素のソート(並び替え)

  • URLをコピーしました!
嫁ちゃん
嫁ちゃん
今回は辞書のソート(並び替え)ですね。
わたし
わたし
そうだね。ここでは 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]

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次