Python - 比较2个二维dicts

时间:2018-05-03 12:35:26

标签: python dictionary

尝试在Python中比较2个二维dicts

写了这段代码:

import collections
import json
import pprint

def dict_compare(d1, d2):
    d1_keys = set(d1.keys())
    d2_keys = set(d2.keys())
    intersect_keys = d1_keys.intersection(d2_keys)
    added = d1_keys - d2_keys
    removed = d2_keys - d1_keys
    modified = {o: (d1[o], d2[o]) for o in intersect_keys if d1[o] != d2[o]}
    same = set(o for o in intersect_keys if d1[o] == d2[o])
    return added, removed, modified, same

checkslist = collections.defaultdict(dict)


checkslist['a'][0]="test1"
checkslist['a'][1]="test2"


with open('checklist.json',"w") as outfile:
    json.dump(checkslist,outfile)


with open('checklist.json',"r") as infile:
    data = json.load(infile)

added, removed, modified, same = dict_compare(data, checkslist)
print(added, removed, modified, same)

不幸的是它效果不好。它将其检测为已修改。

输出:

(set([]), set([]), {'a': ({u'1': u'test2', u'0': u'test1'}, {0: 'test1', 1: 'test2'})}, set([]))

第3集应为空。

如何正确比较2个二维词?

谢谢,

更新1:

checkslistbase = collections.defaultdict(dict)
checkslist = collections.defaultdict(dict)


checkslistbase['a'][0]="test1"
checkslistbase['a'][1]="test2"

checkslist['a'][0]="test1"
checkslist['a'][1]="test3"

想要将checkslistbase与核对清单进行比较。在这种情况下,它应该检测到检查表[' a'] [1]被更改(修改)。它还应该提到添加,删除或者相同的东西。

1 个答案:

答案 0 :(得分:0)

第三组是

{'a': ({u'1': u'test2', u'0': u'test1'}, {0: 'test1', 1: 'test2'})}

a键的值为:

V1 = {u'1': u'test2', u'0': u'test1'}

V2 = {0: 'test1', 1: 'test2'}

问题:V1V2不同,因为V1使用字符串作为键,而V2使用整数作为键。