gpt4 book ai didi

python - 解析 DeepDiff 结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:07:13 24 4
gpt4 key购买 nike

我正在使用 DeepDiff .所以我得到如下结果:

local =  [{1: {'age': 50, 'name': 'foo'}}, {2: {'age': 90, 'name': 'bar'}}, {3: {'age': 60, 'name': 'foobar'}}]
online = [{1: {'age': 50, 'name': 'foo'}}, {2: {'age': 40, 'name': 'bar'}}]
ddiff = DeepDiff(local, online)
added, updated = ddiff['iterable_item_added'], ddiff['values_changed']
added = {'root[2]': {3: {'age': 60, 'name': 'foobar'}}}
updated = {"root[1][2]['age']": {'new_value': 90, 'old_value': 40}}

现在,我想:

list_indexes_added = foo(added)
list_indexes_updated = foo(updated)

并获得:

list_indexes_added = [2]
list_index_updated = [(1,2,'age')]

通过这种方式,我可以操作列表 localonline 并在将来更新 online 表。

我在考虑正则表达式,但也许还有其他选择。

最佳答案

  • 一个解决方案可以是匹配的正则表达式和自定义解析。

  • 如果deepdiff的输出格式一致,另一种可以在对这些字符串进行正则表达式解析后使用literal_eval

    from ast import literal_eval
    import re


    def str_diff_parse(str_diff):
    return [tuple(literal_eval(y) for y in re.findall(r"\[('?\w+'?)\]", x)) for x in str_diff]

    added = {'root[2]': {3: {'age': 60, 'name': 'foobar'}}}
    updated = {"root[1][2]['age']": {'new_value': 90, 'old_value': 40}}

    list_indexes_added = str_diff_parse(added)
    list_indexes_updated = str_diff_parse(updated)

    print(list_indexes_added)
    print(list_indexes_updated)
    # prints
    #[(2,)]
    #[(1, 2, 'age')]

演示:http://ideone.com/3MhTky

  • 还会推荐 dictdiffer模块,它将 diff 作为可消耗的 python diff 对象返回,可以将其修补到原始字典以获取更新的字典,反之亦然。

关于python - 解析 DeepDiff 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39595934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com