You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个collections.defaultdict,删除d1中与d2键重合的全部条目

问题原因说明

Counter类型默认的-运算是对两个对象的同键值做算术减法,仅会移除最终值小于等于0的键,所以你操作后hi键还保留了差值12,不符合「只要d2存在该键就完全移除」的需求。

实现方法

方法1:字典推导式(兼容性最高,支持Counter/defaultdict/普通字典)

适合需要保留原d1、d2数据的场景,生成新的目标对象:

from collections import Counter, defaultdict

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

# 生成符合要求的Counter
d3 = Counter({k: v for k, v in d1.items() if k not in d2})

# 如果是defaultdict场景,改用如下写法
# d3 = defaultdict(int, {k: v for k, v in d1.items() if k not in d2})

print(d3)  # 输出:Counter({'bye': 55, 'ok': 33})

方法2:键集合差集构造

利用字典键视图的集合运算特性,逻辑更直观:

d3 = Counter({k: d1[k] for k in d1.keys() - d2.keys()})

方法3:原地修改d1(无需保留原d1时使用)

直接遍历d2的键从d1中删除,性能更高:

for k in d2:
    # pop第二个参数为None,避免d1无对应键时报错
    d1.pop(k, None)
# 此时d1就是目标结果

内容的提问来源于stack exchange,提问作者maximus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:18:00