かなり使うのに、気付いてなかった…。
「辞書から無効値を持つ項目を取り除く@python」では使えないけれど。
filterってこんな使い方が出来たのね:
1 >>> filter(None, ["a", "", "c"])
2 ['a', 'c']
3 >>> filter(None, ["a", "", "c", None, "d"])
4 ['a', 'c', 'd']
CGIHTTPServerを眺めてて知った。
ちゃんとドキュメントされてた:
iterable のうち、 function が真を返すような要素からなるリストを構築します。 iterable はシーケンスか、反復をサポートするコンテナか、イテレータです。 iterable が文字列型かタプル型の場合、結果も同じ型になります。そうでない場合はリストとなります。 function が None の場合、恒等関数を仮定します。すなわち、 iterable の偽となる要素は除去されます。
「辞書から無効値を持つ項目を取り除く@python」では調べなければいけないのはキーが無効であることではなく値が無効であることなので、
1 >>> d = dict(a=1, b=None, c="")
2 >>> filter(lambda k: d[k], d) # EXPECTED
3 ['a']
4 >>> dict(((k, d[k]) for k in filter(lambda k: d[k], d)))
5 {'a': 1}
6 >>>
7 >>> filter(None, d) # NOT EXPECTED
8 ['a', 'c', 'b']
9 >>> dict(((k, d[k]) for k in filter(None, d)))
10 {'a': 1, 'c': '', 'b': None}
てわけで結局は None ではダメなわけなんですな。