比较两个 collections.defaultdict 并删除相似的值

max*_*mus 4 python collections counter 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})
Run Code Online (Sandbox Code Playgroud)

理想结果:

d3 = set()
d3 = ({'bye':55, 'ok':33})
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ch3*_*teR 5

由于 和d1d2对象Counter,它们实现的减法与集合不同。

来自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}
Run Code Online (Sandbox Code Playgroud)

  • `d1.most_common(2)` 获取 2 个最大值。`d1.most_common(2).keys() - d2.most_common(2).keys()` (2认同)
  • @dawg 有完美的解决方案@sarah 这是 [`Counter.most_common`](https://docs.python.org/3/library/collections.html#collections.Counter.most_common) 的链接 (2认同)