ハバナ式継続的デリバリー

Python, Ubuntu, JavaScript 色々知らなかった!のメモ

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のマニュアルにちゃんと書いてありました。


以上