我有两个对象:
d1 = [ { "id": 3, "name": "test", "components": [ { "id": 1, "name": "test" }, { "id": 2, "name": "test2" } ] } ]
d2 = [ { "id": 4, "name": "test", "components": [ { "id": 2, "name": "test" }, { "id": 3, "name": "test"2 } ] } ]
如您所见,一切都保持不变,但
id
属性在根对象和 components
内部都发生了变化。
我使用
DeepDiff
来比较 d1
和 d2
并尝试忽略 id
对象的比较。但是,我不确定如何实现这一目标。我尝试了以下似乎不起作用。
excluded_paths = "root[\d+\]['id']"
diff = DeepDiff(d1, d2, exclude_paths=excluded_paths)
您可以尝试使用
exclude_obj_callback
:
from deepdiff import DeepDiff
def exclude_obj_callback(obj, path):
return True if "id" in path else False
d1 = [ { "id": 3, "name": "test", "components": [ { "id": 1, "name": "test" }, { "id": 2, "name": "test2" } ] } ]
d2 = [ { "id": 4, "name": "test", "components": [ { "id": 2, "name": "test" }, { "id": 3, "name": "test2" } ] } ]
print(DeepDiff(d1, d2, exclude_obj_callback=exclude_obj_callback))
它的作用是为每个包含字符串“id”的深层组件返回一个布尔值。您可能需要小心这一点,因为您可能会排除您无意的其他对象。解决这个问题的方法可能是设置不太通用的键值,例如“component_id”。