0

我试图使用一个库:Datadiff,但 diff 的输出似乎并不一致。我正在分析两个 json,用它​​们制作一些字典,然后我正在比较字典。但是对于第一个文件,输出显示所有已更改的对象,而在第二个文件中,输出是行中的,因此显示了不同的 json 行,但不是整个更改的对象在 diff 中仍然是一个谜. 我对这种行为感到很困惑,你能解释一下或解决这个问题吗?下面是代码:

    out = datadiff.diff(t[0].get("key"),t[1].get("key"))
    if options.get("key2") != None:
        out = scorecheck(out,options.get("key2"))
    if checkdiff(str(out)):
        f.write("Feelings:<br/>")
        printdiff(f, str(out))

第一个文件的差异输出:

+{u'origin': u'VIRTUAL', u'score': 1, u'type': u'PLACES', u'name': u'comune di Roma'},
+{u'origin': u'VIRTUAL', u'score': 1, u'type': u'PLACES', u'name': u'provincia di Roma'},

与第二个文件的区别:

 -u'position': 1,:
  u'score': 1,:
  u'score': 1,:
  u'score': 1,:

我正在尝试选择所有包含分数 1 的“对象”,而不仅仅是在 json 中显示分数 1 的行。所以对我来说第一个输出没问题,第二个没用。

4

1 回答 1

0

Datadiff 不是 diff 的圣书,尤其是对于 python 结构的 diff。您可以构建您喜欢的功能来制作您需要的个性化差异,而且这样做非常容易。这个网站上有很多例子。许多人更喜欢通过 new 构建差异而不是使用 datadiff 库(甚至没有很好的文档记录)。所以下面是一个代码示例,用于制作两个 dict 列表的差异。它返回一个dict列表,第一个包含第一个文件的差异,第二个包含比较的第二个文件的差异。在 html 文件中以不同颜色打印两个列表很有用:

def listdiff(listofdict1,listofdict2):
listofdict3 = []
listofdict4 = []
for i in listofdict1:
    if i not in listofdict2:
        listofdict3.append(i)
for j in listofdict2:
    if j not in listofdict1:
        listofdict4.append(j)
return [listofdict3,listofdict4]
于 2013-11-05T09:00:12.727 回答