Python学習【365日チャレンジ!】282日目のマスターU(@Udemy11)です。
Youtubeの釣り動画をついつい見てしまうのですが、生きたアジを使って青物やアオリイカを釣る「飲ませ釣り」動画を見ていると、とても簡単に青物やアオリイカが釣れているので、近いうちにやりたいな~と思ったんです。
とりあえず、思い立ったが吉日ということで、夜のアジングで何匹か釣れたアジを生かしておき、次の日の昼間からのんびり「飲ませ釣り」に行ってきました。
結果は青物もアオリイカも釣れなかったのですが、全く予想していなかった人生初のヒラメが釣れて大満足。
ヒラメを捌くのは初めてだったので、うろこのすき引き、5枚おろし、薄造りにかなり時間がかかってしまいましたが、エンガワもきれいに取れて、大根でツマを用意して見た目もおいしくいただきました。
ヒラメは寝かせたほうがおいしくなるそうなので、何日かに分けていただこうと思います。
それでは今日も、Python学習を始めましょう。
昨日の復習
昨日は、辞書型データの順番を判断できるOrderedDict
を学習しました。
辞書型データはPython2.7までは、保存されているkey-value
の順序は保持されていませんでしたので、順序が関係したデータの扱いは、OrderedDict
を使う必要がありました。
Python3.7以降は正式に辞書型データでもkey-value
の順序を保持するようになりましたが、入っている複数のkey-value
が同じ2つの辞書型データで、順序を判断するには、OrderedDict
を使う必要がありました。
くわしくは昨日の記事をごらんください。
今日は、OrderedDict
の使い方を学習します。
key順で並べ替え
OederedDict
を使って並び替えや値の追加を試してみます。
まずは、key
を基準にソートします。
import collections
d = {'orange': 4, 'apple': 6, 'pear': 1}
od1 = collections.OrderedDict(
sorted(d.items(), key=lambda t: t[0]))
print(od1)
出力結果
OrderedDict([('apple', 6), ('orange', 4), ('pear', 1)])
辞書型データのd
に入れた値をsorted()
とlambda
を使ってkey
のアルファベット順に出力しています。
6行目のコードの最後のt[0]
でkey
を基準にすることを指定しています。
value順で並び替え
key
で並び替えたので、次は、value
の値で並び替えて出力しています。
od2 = collections.OrderedDict(
sorted(d.items(), key=lambda t: t[1]))
print(od2)
出力結果
OrderedDict([('pear', 1), ('orange', 4), ('apple', 6)])
結果を見るとわかりますが、value
の数字が小さい数順に並べ替えられています。
6行目の最後のt[1]
でkey
を基準にすることを指定しています。
長さ順で並び替え
次に、key
の長さ順で並び替えます。
od3 = collections.OrderedDict(
sorted(d.items(), key=lambda t: len(t[0])))
print(od3)
出力結果
OrderedDict([('pear', 1), ('apple', 6), ('orange', 4)])
6行目のlen(t[0])
でkey
の長さを基準にしています。
新しい値を追加
最後に新しい値を追加するときはどうなるのかチェックしてみます。
od4 = collections.OrderedDict(d)
od4['cc'] = 100
print(od4)
出力結果
OrderedDict([('orange', 4), ('apple', 6), ('pear', 1), ('cc', 100)])
6行目でkey='cc'
、value=100
を追加して、7行目で出力しています。
出力結果を見ると、値が最後に追加されているので、もし並べ替えたあとに値を追加した場合は、もう一度、ソートの処理を実行しないと追加した値が最後に追加されたままになります。
まとめ
値の順番を保持するOrderedDict
の並び替えや追加について学習しましたが、dict
もPython3.7から順番を保持するようになったので、実はOrderedDict
を使わなくてもdict
で同じことができます。
import collections
d = {'orange': 4, 'apple': 6, 'pear': 1}
print(sorted(d.items()))
print(sorted(d.items(), key=lambda t: t[1]))
print(sorted(d.items(), key=lambda t: len(t[0])))
d['aaa'] = 100
print(d)
出力結果
[('apple', 6), ('orange', 4), ('pear', 1)]
[('pear', 1), ('orange', 4), ('apple', 6)]
[('pear', 1), ('apple', 6), ('orange', 4)]
{'orange': 4, 'apple': 6, 'pear': 1, 'aaa': 100}
出力結果は先頭にOrderedDict
がないだけで、値は順番を保持した出力になっています。
辞書型でできるならOrderedDict
はいらないんじゃない?と思う私ですが、Pythonのバージョンが上がるにつれて、どんどん便利になっているので、もしかしたらOrderedDict
はなくなってしまうかもしれません。
OrderedDict
とdict
の違いは、いろいろあるとは思いますが、私は2つのデータが順番も含めて値が同じかどうかを判断できるかどうかというところしかしらないので、この比較の必要がなくなれば、OrderedDict
がなくなってしまうのかもしれませんね。
それでは、明日もGood Python!