Deepdiff - Iterable_compare_func无法正常工作

Deepdiff - Iterable_compare_func not working properly

提问人:brxdeop 提问时间:8/31/2023 更新时间:8/31/2023 访问量:67

问:

我最近遇到了一个关于比较函数“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 的元素应该相互比较。

https://zepworks.com/deepdiff/6.3.1/custom.html

python 可迭代 deep-diff

评论


答: 暂无答案