我正在使用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')]
通过这种方式,我可以操作列表local
和online
,并在将来更新online
表。
我在考虑regexs,但也许还有其他选择。
4条答案
按热度按时间pgvzfuti1#
deepdiff
的输出格式一致,则可以在对这些字符串进行正则表达式解析后使用literal_eval
demo:http://ideone.com/3MhTky
ltqd579y2#
这就是我所做的:
所以:
也许有人可以改善它。
91zkwejq3#
所以,我会这样说:
它将读取每个键,只提取索引(无论是数字还是字符串),然后对字符串进行切片。由于所需的输出指示一个元组,它将把索引序列分解为一个,然后返回整个索引集列表(因为
diff
可能有多个)。这可以归结为一行列表解析:
zphenhs44#
DeepDiff的作者请按照常见问题解答中的说明使用
parse_path