DeepDiff使用include_paths时非包含路径影响对比结果问题
DeepDiff指定include_paths仍出现差异的原因
你遇到的问题核心在于DeepDiff默认会优先检测字典的键数量差异,再结合include_paths的过滤逻辑,导致两种场景出现不同结果:
具体原因拆解
第一个案例(左右字典键数量不同)
左字典有3个键,右字典只有2个键,DeepDiff默认会将键数量不一致的情况视为结构差异,直接报告新增/缺失的字典项(比如右边新增的uid、左边缺失的code和noneCode)。这种结构层面的检测不受include_paths限制——因为include_paths仅控制指定路径的值对比,无法覆盖默认的字典结构完整性检查。第二个案例(左右字典键数量相同)
左右字典都有2个键,此时DeepDiff不会触发键数量差异的检测,转而遵循include_paths的规则,只对比root['name']对应的值。因为两边name的值完全一致,所以返回空字典。
解决方案
如果你希望完全忽略非指定路径的所有差异(包括键数量、新增/缺失键),可以添加ignore_missing_keys=True参数,强制DeepDiff只关注include_paths指定的路径:
from deepdiff import DeepDiff DeepDiff( {'name': 'Testname', 'code': 'bla', 'noneCode': 'blu'}, {'uid': '12345', 'name': 'Testname'}, include_paths="root['name']", ignore_missing_keys=True # 新增此参数 ) # 此时返回{},符合预期
内容的提问来源于stack exchange,提问作者user27715136
相关产品推荐
相关产品推荐

