# -*- coding: utf-8 -*-
from pprint import pprint

from deepdiff import DeepDiff, DeepSearch

a = [1, 2, 3, {'c1': 1, 'b': '2', 'a': '3'}]
b = [3, 4, 5, {'a': 3, 'b': '4', 'c': '5'}]
diff_result = DeepDiff(a, b, ignore_order=True,cutoff_distance_for_pairs=1,verbose_level=2)
pprint(diff_result)
打印结果为
{'dictionary_item_added': {"root[3]['c']": '5'},
 'dictionary_item_removed': {"root[3]['c1']": 1},
 'type_changes': {"root[3]['a']": {'new_type': <class 'int'>,
                                   'new_value': 3,
                                   'old_type': <class 'str'>,
                                   'old_value': '3'}},
 'values_changed': {'root[0]': {'new_value': 5, 'old_value': 1},
                    'root[1]': {'new_value': 4, 'old_value': 2},
                    "root[3]['b']": {'new_value': '4', 'old_value': '2'}}}

目前有个需求点: values_changed 时,格式是 当前 object 的【对比路径:{ new_value:xxx, old_value:yyy }】如何在不进行二次查找的情况下 (如使用 DeepSearch ) 找到 new_value 在对比 object 中的 path 即 本例中 new_value: 5 在 b 中的 path
希望是同时输出路径,二次查找的话 如果嵌套深,节点有重复 无法确认是否是当前对比的路径


↙↙↙阅读原文可查看相关链接,并与作者交流