DeepDiff 使用正则表达式忽略

问题描述 投票:0回答:1

我有两个对象:

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)
python regex python-deepdiff
1个回答
2
投票

您可以尝试使用

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”。

© www.soinside.com 2019 - 2024. All rights reserved.