Python collections.defaultdict(set)

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

ここのところ、若干睡眠不足で昼間に眠気が襲ってくるので、早く寝ないととおもいつつ、ついつい夜ふかしをしてしまいます。

原因は、メルカリやPayPayフリマ、ラクマなどで、魅力的な商品を見つけては、どうしようかな〜と悩んだり、値段交渉したりしているせいなんです。

とりあえず、エギングに必要な餌木猿スーパーシャローの3.5号は色も結構揃って物欲も一段落したので、少しは睡眠不足が解消するかと思いますが、また別の物欲が湧いてくるんですよね。

ということで、寝不足と戦いながらも、今日も、Python学習を始めましょう。

昨日の復習

昨日は、文字をカウントして辞書型データにまとめることができるdefaultdictを学習しました。

defaultdictを使わなくても、forループを使って文字のカウントをすることはできましたが、cを使えば、よりシンプルなコードにすることができました。

以前学習した復習も兼ねた昨日の記事は、こちらからごらんください。

今日は、intだけでなくsetでも使えるdefaultdictを学習します。

set

setは集合ですが、集合を覚えていますか?

集合は、リストやディクショナリで重複した値を一つにまとめて、どの種類があるかを知ることができるものです。

例えば、次コードのように、リストを集合にして出力する場合を考えてみましょう。

l = [1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5]
s = set(l)
print(s)

出力結果

{1, 2, 3, 4, 5}

リストが種類別にまとめて表示されますよね。

複数ある値は一つにまとめられて表示されることを思い出しましたか?

一方で、defaultdictは、intだけでなくset(集合)でも使うことができるので、例を示してみたいと思います。

defaultdict(set)

辞書型で重複するkeyvalueだけ分けて辞書に入れたり、重複するkey-valueは一つにしたりすることができます。

一例のコードを書いてみます。

import collections

d = collections.defaultdict(set)
s = [('red', 1), ('blue', 3), ('red', 2), ('blue', 3), ('blue', 4)]
for k, v in s:
    d[k].add(v)
print(d)

出力結果

defaultdict(, {'red': {1, 2}, 'blue': {3, 4}})

昨日collections.defaultdict(int)としたところをcollections.defaultdict(set)に変更して、辞書型リストsを定義しています。

辞書型のリストsには、同じkeyvalueが入っているので、5行目と6行目でforループとaddメソッドを使ってkey-valueにまとめたsetデータに保存し、7行目でdを出力しています。

まとめ

個人的に、集合型データの取り扱いは、重複するデータを一つにまとめるなど、少しややこしかったので、きちんと理解せずに使っていたのですが、今日の学習で、きちんと理解することができました。

重複したデータをひとまとめにしてくれる集合は、非常に便利ですし、実践になれば結構使いそうな感じですので、しっかりと覚えておいたほうがいいでしょう。

覚えてなくても実際に使う場面が増えてくると嫌でも憶えられそうな気もしますが。。。

それでは、明日もGood Python!