Pythonのsetは算術演算子が使える
タグを複数指定してデータを絞り込む
複数のタグが付いたデータにタグを指定して絞り込む処理を書いていて、タグを複数指定した場合にすべてのタグを持っているデータだけ取り出すにはどうしたら良いかわからなくなって調べた。
例えば、以下のリストの中で、
entries = [ {'apple', 'fruit', 'lemon'}, {'apple', 'computer', 'mac'}, {'mac', 'hamburger', 'lemon'}, ]
- 指定した文字列を含む要素だけ取り出したい。
- 但し、文字列は複数指定できる。
こういうことがしたいのだ。
(上記の例では、「lemonとfruit」を指定したら1番目の要素が返ってくる)
これが「タグは1つしか渡せない」のであれば簡単で
tag = 'apple' result = [x for x in entries if tag in x]
このようにinを使えば済む。
Pythonのsetにはスーパーセット、サブセットを表す算術演算子が実装されていた
この通り、<や<=を使うと左辺が右辺に含まれることを調べられる。
http://docs.python.jp/2/library/stdtypes.html#set.issubset
set <= other set の全ての要素が、 other に含まれるか確認します。 set < other set が other の真部分集合であるかを確認します。つまり、 set <= other and set != other と等価です。
Pythonのマニュアルにちゃんと書いてありました。
以上