Python 有什么好的办法比较两个 JSON list 的差异?

2017-07-09 19:02:58 +08:00
 misaka19000

有 list A 与 list B,list 中的每一个元素是一个 JSON 对象,请问有什么好的方式来比较两个 list 中存在差异的部分呢?

例如:

list A:[json1, json2, josn3]

list B:[json1, json2, josn3]

我想要比较这两个 list 是否完全一样或者存在着怎样的差异,请问最好的解决方式是什么?

5724 次点击
所在节点    Python
15 条回复
noli
2017-07-09 19:08:07 +08:00
把 list 变成 set,再用交集并集运算
misaka19000
2017-07-09 19:19:55 +08:00
@noli list 中可能存在重复元素,这些元素个数也需要一致。。
bazingaterry
2017-07-09 19:22:30 +08:00
先转成字符串再对比?
JhZ7z587cYROBgVQ
2017-07-09 19:22:45 +08:00
用 collections.Counter([iterable-or-mapping]) 做做看呢?
noli
2017-07-09 19:30:27 +08:00
@misaka19000 那你可以包一个 python 对象再放进 set 里面,这个 python 对象指出 json 在原 list 里面的 index,这样他们的 __hash__ 不一样,甚至你还可以自己再重载一下 __hash__
zeroten
2017-07-09 19:33:18 +08:00
这个 https://bitbucket.org/vadim_semenov/json_tools/wiki/Home 或者其他 json 比较的包
carlonelong
2017-07-10 00:14:10 +08:00
把 json load 出来 sort 比较?
我记得有专门比较 json 的库的,GitHub 上面应该能找到。
noobsheldon
2017-07-10 08:52:48 +08:00
dictdiffer 可以试试
sunwei0325
2017-07-10 09:11:20 +08:00
@noobsheldon 这个库好👍
ToBeHacker
2017-07-10 10:11:08 +08:00
感觉就是遍历啊,你用啥都绕不开这个的,只是用起来简便一点而已。
livepps
2017-07-10 11:56:50 +08:00
排序一下,格式化成字符串,然后用自带的 diff 库比较,这个库比对差异效率非常高。
misaka19000
2017-07-10 12:13:46 +08:00
@livepps 谢谢,我待会儿试一下
ikeeper
2017-07-12 08:25:03 +08:00
for x,y in zip(list1,list2):
if x == y:
print(1)
else:
print(0)
#小白表示这样不行吗
ikeeper
2017-07-12 08:25:49 +08:00
@ikeeper 原来 V2EX 没法显示缩进
misaka19000
2017-07-12 08:32:37 +08:00
@ikeeper 两个 list 顺序可能不一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374105

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX