首页 > 解决方案 > 比较两个 collections.defaultdict 并删除相似的值

问题描述

我有两个collections.defaultdict并试图从中删除值d1也在d2.

from collections import Counter, defaultdict
d1 = Counter({'hi': 22, 'bye': 55, 'ok': 33})
d2 = Counter({'hi': 10, 'hello': 233, 'nvm': 96})

理想结果:

d3 = set()
d3 = ({'bye':55, 'ok':33})

到目前为止,我已经尝试过:

d3 = set()
d3 = d1 - d2
print(d3)
Counter({'bye': 55, 'ok': 33, 'hi': 12}) 

但这保持相同的值,'hi'即使我想删除所有相似的值。

标签: pythoncollectionscounterdefaultdict

解决方案


因为,d1并且d2Counter对象,它们实现的减法不同于集合。

来自collections.Counter(强调我的):

加法和减法通过增加或减少相应元素的计数来组合计数器。

set.differenceset - other:

返回一个新集合,该集合中的元素不在其他集合中。

也就是说,您可以像集合一样使用Counter.keys和使用。difference

keys = d1.keys() - d2.keys()
# keys = {'bye', 'ok'}

out = {k: d1[k] for k in keys}
# out = {'bye': 55, 'ok': 33}

推荐阅读