提问人:brxdeop 提问时间:8/31/2023 更新时间:8/31/2023 访问量:67
Deepdiff - Iterable_compare_func无法正常工作
Deepdiff - Iterable_compare_func not working properly
问:
我最近遇到了一个关于比较函数“iterable_compare_func”的问题。基本上 deepdiff 返回一个错误的差异。
我使用文档中描述的完全相同的两个列表进行测试,结果并不相同。
from deepdiff import DeepDiff
from deepdiff.helper import CannotCompare
t1 = [
{
'id': 1,
'value': [1]
},
{
'id': 2,
'value': [7, 8, 1]
},
{
'id': 3,
'value': [7, 8],
},
]
t2 = [
{
'id': 2,
'value': [7, 8]
},
{
'id': 3,
'value': [7, 8, 1],
},
{
'id': 1,
'value': [1]
},
]
>>> DeepDiff(t1, t2)
{'values_changed': {"root[0]['id']": {'new_value': 2, 'old_value': 1}, "root[0]['value'][0]": {'new_value': 7, 'old_value': 1}, "root[1]['id']": {'new_value': 3, 'old_value': 2}, "root[2]['id']": {'new_value': 1, 'old_value': 3}, "root[2]['value'][0]": {'new_value': 1, 'old_value': 7}}, 'iterable_item_added': {"root[0]['value'][1]": 8}, 'iterable_item_removed': {"root[2]['value'][1]": 8}}
iterable_compare_func。
def compare_func(x, y, level=None):
try:
return x['id'] == y['id']
except Exception:
raise CannotCompare() from None
现在通过设置函数。结果是错误的,如下所示。
>>> DeepDiff(t1, t2, iterable_compare_func=compare_func)
{}
>>> DeepDiff(t1, t2, iterable_compare_func=compare_func, verbose_level=2)
{'iterable_item_moved': {'root[0]': {'new_path': 'root[2]', 'value': {'id': 1, 'value': [1]}}, 'root[1]': {'new_path': 'root[0]', 'value': {'id': 2, 'value': [7, 8]}}, 'root[2]': {'new_path': 'root[1]', 'value': {'id': 3, 'value': [7, 8, 1]}}}}
deepdiff v6.3.1 遇到了这个问题,并且在 2 个不同的环境中验证了相同的问题。 如果有人有同样的问题或可以复制以确认。
谢谢。
预期是文档所描述的:iterable_compare_func有助于定义哪些元素与其他元素进行比较,在这里我们定义具有相同 ID 的元素应该相互比较。
答: 暂无答案
评论