Python OrderedDict

Python学習【365日チャレンジ!】281日目のマスターU(@Udemy11)です。

Youtubeの動画を見ていると、次から次へとおすすめの動画が再生されるので、ついつい時間を忘れて見入ってしまいます。

そんなYoutubeですが、私が見るのはほとんど釣り動画で、挑戦しようと思っているのが「アジの泳がせ釣り」。

ルアーと違って、日中でも投げてほっとくだけで青物が釣れるという超魅力的な釣り方です。

ただ、餌のアジを生かしておく活かしバッカンがいるし、アジをつかんで針をつけないといけないので、あまり乗り気じゃなかったのですが、動画で結構簡単に釣れているのを見て、かなり誘惑されています。

アジングである程度の数のアジを確保出来たら実践したいと思います。

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、namedtupleを使ってCSVファイルを活用する方法を学習しました。

CSVファイルの扱い方を復習して、namedtupleを使って、CSVファイルから値を取り込んで、取り込んだデータを活用することができました。

くわしくは昨日の記事をごらんください。

今日は、辞書型データの保有順を記憶するOrdredDictを学習します。

dict

辞書型データを扱う場合は、bracesの波括弧を使ってkeyvalueの値を入れましたが、Python2.7までは、dict型は順番を保持していませんでした。

なので、次のようなコードで、変数dに値を入れてprint出力すると、順番が入れ替わったりすることがあり、順番の判断をすることができませんでした。

d = {'apple': 2, 'banana': 1, 'orange': 4}
print(d)

出力結果

{'orange': 4, 'banana': 1, 'apple': 2}

現在Pythonの最新バージョンは3.9ですが、Python3.6から、動作の保証はないものの、値の順序を保持するようになり、Python3.7から正式にdict型のデータで、データの順序が保持できるようになりました。

OrderedDict

辞書型データで順序が保持できるようになったので、OrderedDictが不要かというとそうでもなく、辞書型データどうしの順序を含めた比較では、OrderedDictを使う必要があります。

import collections


d1 = {'apple': 2, 'banana': 1, 'orange': 4}
d2 = {'apple': 2, 'orange': 4, 'banana': 1}

od1 = collections.OrderedDict(
    {'apple': 2, 'banana': 1, 'orange': 4})
od2 = collections.OrderedDict(
    {'orange': 4, 'apple': 2, 'banana': 1})

print(d1 == d2)
print(d1 == od2)
print(od1 == od2)

出力結果

True
True
False

上記のコードは、中に入れるkey-valueが同じで順序が違うdictOrderedDictを作って、その比較をしているコードになります。

dictd1d2は、中にはいっているkeyvalueは同じなので、12行目はTureが返されています。

13行目は、d1OrderedDictを比較していますが、順序が入れ替わっていても入っている値が同じであるため、Tureを返しています。

14行目はOrderedDictであるod1od2比較していますが、値は同じでも、順番が違うので、falseと表示されているのがわかります。

まとめ

Pythonはどんどん進化して、アップデートが繰り返されているので、酒井さんの講座では、3.6までの対応でしたが、現時点ですでにPython3.9までアップデートされています。

情報はどんどん古くなってしまうので、講座の内容にとらわれることなく、「おかしいな」と感じたら、すぐにネットで調べる癖をつけたほうがいいでしょう。

それでは、明日もGood Python!