我有一个Counter
(from collections
) 并且想过滤掉一组不需要的项目。结果应该是一个新的 Counter (或者如果你喜欢,就地做),只包含与属性不匹配的项目。我尝试filter
在 the 上使用,Counter
但结果Counter
不再是 a 而只是list
. 我还尝试从中减去一个set
不需要的项目,Counter
但该操作没有实现。减去一个Counter
作品,但我没有第二个Counter
,创建它本质上是我正在尝试执行的相同任务。
Counter([ 1,2,3,4,5,6,7,6,5,4,3,2,3,4,5,6,5,4,3,4,5,4 ])
→ Counter({4: 6, 5: 5, 3: 4, 6: 3, 2: 2, 1: 1, 7: 1})
现在我想从这个计数器中删除所有2
和3
值,所以结果应该是
Counter({4: 6, 5: 5, 6: 3, 1: 1, 7: 1})
这是我的方法:
filter(lambda x: x not in (2, 3), c)
→ [1, 4, 5, 6, 7]
但我不想要一个清单。
c - set([ 2, 3 ])
→ TypeError: unsupported operand type(s) for -: 'Counter' and 'set'
我可以使用 sth 来迭代解压缩的元素列表,Counter
如下所示:
Counter(x for x in c.elements() if x not in (2, 3))
→ Counter({4: 6, 5: 5, 6: 3, 1: 1, 7: 1})
但这显然对于大笔交易来说是不必要的昂贵。
我发现的唯一(不是很好)解决方案是这样的麻烦:
Counter({ k: v for k, v in c.iteritems() if k not in (2, 3) })
有没有更好、更容易、更易读的东西我忽略了?
为什么没有一个Counter
可以与 a 一起使用的已实现的减法运算符set
?