標準ライブラリ データ型 辞書操作

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

嫁ちゃん
嫁ちゃん
今回は辞書のソート(並び替え)ですね。
わたし
わたし
そうだね。ここでは sorted関数を使って実装します。 辞書のソート(並び替え)も覚えてしまえば、そんなに難しくないので、ここで一緒に学びましょう!

辞書とは?

辞書は他の言語にも “連想記憶 (associated memory)” や “連想配列 (associative array)” という名前で存在することがあります。ある範囲の数でインデクス化されているシーケンスと異なり、辞書は キー (key) でインデクス化されています。このキーは何らかの変更不能な型になります。文字列、数値は常にキーにすることができます。タプルは、文字列、数値、その他のタプルのみを含む場合はキーにすることができます。
5.5. 辞書型 (dictionary) – Python3.8.1 ドキュメント

こちらも合わせてご覧ください。
>>>【Python】辞書操作:辞書の作成
>>>【Python】辞書操作:キーと値の存在チェックと検索
>>>【Python】辞書操作:要素の追加・変更
>>>【Python】辞書操作:要素の削除

辞書の要素をソート(並び替え)

sorted関数 の引数に辞書のみを指定した場合

Python
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() を指定した場合

Python
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 で並び替える

Python
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 で並び替える

Python
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 って難し感じがしますね。

わたし
わたし

関数定義を省略した記述になるので、関数定義の手間は省けるけど、慣れないとどういったコードが書かれているのかわからなくなってしまうね。少しずつ学んでいこうね。

この記事がお役に立てましたら幸いです。
人気ブログランキングに参加しております。
よろしければクリックしていただけると嬉しいです。
にほんブログ村 IT技術ブログ Pythonへ
※本サイトに掲載する情報には充分に注意を払っておりますが、その内容について保証するものではありません。
※本サイトの使用ならびに閲覧によって生じたいかなる損害にも責任を負いかねます。

コメント

タイトルとURLをコピーしました