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

Python中比较过滤两个嵌套字典并按规则生成新字典

KeyError报错原因
  • 遍历new_dict时,新增键(比如示例中的tab)不存在于old_dict中,直接访问old_dict[k1]会触发键不存在的KeyError。
  • 代码里字段名拼写错误:原字典存储的字段是purchasedon,代码中写为purchaseon(漏了字母d),即使键存在,访问不存在的字段也会触发KeyError。
  • 附带逻辑bug:每次匹配到符合条件的条目时,直接用final_dict = {k1: ...}整体覆盖字典,最终结果只会保留最后一个匹配到的条目,无法得到完整的目标字典。
前置语法修正

你给出的初始字典写法不符合Python语法规范,字典的键值对直接在外层大括号内用逗号分隔即可,不需要给每个键值对单独套大括号,修正后的初始字典如下:

old_dict = {
    'laptop': {'purchasedon': 10052022},
    'mobile': {'purchasedon': 10052022}
}
new_dict = {
    'laptop': {'purchasedon': 10062022},
    'mobile': {'purchasedon': 10052022},
    'tab': {'purchasedon': 10062022}
}
正确实现代码
final_dict = {}
for key, value in new_dict.items():
    # 满足两个条件之一就保留:键是old_dict中没有的新增项;键存在但对应值和old_dict不一致
    if key not in old_dict or value != old_dict[key]:
        final_dict[key] = value

运行后得到的final_dict完全符合预期输出:

{
    'laptop': {'purchasedon': 10062022},
    'tab': {'purchasedon': 10062022}
}
逻辑说明
  • 仅需遍历new_dict:所有需要保留的条目都来自new_dict,old_dict中存在但new_dict没有的条目天然不会出现在结果中,不需要额外处理。
  • 判断逻辑不需要硬编码内部字段名,直接对比键对应的完整值即可,后续如果字典内新增其他属性,该逻辑依然可以准确判断值是否发生变更,通用性更强。
  • 新增条目时用final_dict[key] = value的方式追加键值对,不会覆盖之前已经存入的符合条件的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:48:09