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

Python是否存在标准函数可实现两个字典的差异对比

回答

Python标准库没有提供直接返回你定义的四类字典差异结果的专用函数,但依托Python 3开始内置的字典视图集合运算特性,只需要少量代码就能完整实现你需要的CompareTwoDict类全部功能,无需依赖任何第三方包。

字典的keys()、items()方法返回的视图对象原生支持集合的交、并、差运算,刚好匹配四类对比场景的逻辑:

  • 新增条目:对两个字典的键集合做差集,拿到dict2独有、dict1不存在的键,提取对应值即可
  • 删除条目:同理拿到dict1独有、dict2不存在的键,提取对应值即可
  • 修改条目:先拿到两个字典共有的键,筛选出同键下值不相等的项,返回dict2中对应的值
  • 共有条目:直接对两个字典的items()视图取交集,由于items()返回的是(键, 值)元组,元组相等就代表键和值完全匹配

完整可直接运行的实现代码如下:

class CompareTwoDict:
    def __init__(self, dict1, dict2) -> None:
        self._dict1 = dict1
        self._dict2 = dict2
    
    def added_from_dict1(self):
        add_keys = self._dict2.keys() - self._dict1.keys()
        return {k: self._dict2[k] for k in add_keys}
    
    def deleted_from_dict1(self):
        del_keys = self._dict1.keys() - self._dict2.keys()
        return {k: self._dict1[k] for k in del_keys}
    
    def modified_from_dict1(self):
        common_keys = self._dict1.keys() & self._dict2.keys()
        return {k: self._dict2[k] for k in common_keys if self._dict1[k] != self._dict2[k]}
    
    def common_between_dict1_dict2(self):
        return dict(self._dict1.items() & self._dict2.items())

注意:上述实现仅适用于字典值可哈希、支持==判等的场景。如果字典存在嵌套列表、嵌套字典这类不可哈希的值,直接对items()做集合运算会抛出类型错误,这种场景需要自行编写递归对比逻辑。标准库没有提供内置的嵌套字典深度对比能力,如果不需要严格限制标准库依赖,可以用第三方库deepdiff实现全场景的差异识别,但它不属于Python官方标准库范畴。

简单的功能验证示例:

d1 = {"name": "Zhang", "age": 25, "city": "Beijing"}
d2 = {"name": "Zhang", "age": 26, "job": "engineer"}
cmp = CompareTwoDict(d1, d2)
print(cmp.added_from_dict1())          # {'job': 'engineer'}
print(cmp.deleted_from_dict1())        # {'city': 'Beijing'}
print(cmp.modified_from_dict1())       # {'age': 26}
print(cmp.common_between_dict1_dict2())# {'name': 'Zhang'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:18:17