Pythonで初めて辞書をソートする時に、ソートの過程に思わぬ挙動があり少しハマってしまいました。
Pythonで辞書(dict)をソートする方法と注意点について記します。
最後に キー・値ソート、昇順・降順ソートのサンプルを載せておきます。
Pythonの辞書をキーで昇順ソート
ではまず一番シンプルなキーの昇順ソートを行ってみます。
Pythonで辞書をキーで昇順ソートするには sorted() を用いて下記のように記述します。
出力結果を見るとキーがアルファベット昇順にソートされていることがわかります。しかし何か違和感が。。
fruits = {'Orrange':150,'Apple':100,'Grape':400,'Banana':80}
fruits = sorted(fruits.items())
print(fruits)
#出力:[('Apple', 100), ('Banana', 80), ('Grape', 400), ('Orrange', 150)]
Pythonで辞書をソートする際の注意点
上記の出力結果はソート前の dictとは何か形式が違うように見えます。
気になるので出力してみます。
list の中に tupleが入る形になっています。
辞書を sorted() で並び替えると型が変わるため、そのまま辞書として扱おうとするとエラーが発生する場合があるので注意が必要です。
fruits = {'Orrange':150,'Apple':100,'Grape':400,'Banana':80}
fruits = sorted(fruits.items())
print(type(fruits))
print(type(fruits[0]))
#出力:<class 'list'>
#出力:<class 'tuple'>
sortした後に辞書に戻す(辞書をキーで昇順ソート)
上述の通りsorted() でソートを行うと型が変わるので、辞書に戻してやりましょう。
下記のように記述します。
fruits = {'Orrange':150,'Apple':100,'Grape':400,'Banana':80}
fruits = sorted(fruits.items())
fruits = dict((x, y) for x, y in fruits)
print(fruits)
#出力:{'Apple': 100, 'Banana': 80, 'Grape': 400, 'Orrange': 150}
きちんとキーで昇順ソートされていて、型も辞書になっていますね。
では、以上の注意点を踏まえたら、値ソート、降順ソートについても見ていきましょう。
辞書をキーで降順ソート
前述のように、soreted() のデフォルトは昇順ソートとなっています。
降順ソートを行う場合は sorted() の引数に reverse=True を追加します。
fruits = {'Orrange':150,'Apple':100,'Grape':400,'Banana':80}
fruits = sorted(fruits.items(),reverse=True)
fruits = dict((x, y) for x, y in fruits)
print(fruits)
#出力:{'Orrange': 150, 'Grape': 400, 'Banana': 80, 'Apple': 100}
辞書を値で昇順ソート
辞書を値でソートするには、sorted() の引数に key=lambda x:x[1] を追加します。
前出の reverse=Trueは含めてないので、値の昇順そーとになります。
fruits = {'Orrange':150,'Apple':100,'Grape':400,'Banana':80}
fruits = sorted(fruits.items(),key=lambda x:x[1])
fruits = dict((x, y) for x, y in fruits)
print(fruits)
#出力:{'Banana': 80, 'Apple': 100, 'Orrange': 150, 'Grape': 400}
辞書を値で降順ソート
sorted() の引数に key=lambda x:x[1] と reverse=True 両方含めると値の降順ソートになります。
fruits = {'Orrange':150,'Apple':100,'Grape':400,'Banana':80}
fruits = orted(fruits.items(),key=lambda x:x[1],reverse=True)
fruits = dict((x, y) for x, y in fruits)
print(fruits)
以上、Pythonで辞書(dict)をソートする方法と注意点でした。
参考になれば幸いです!
コメント