尝试在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]被更改(修改)。它还应该提到添加,删除或者相同的东西。
答案 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'}
问题:V1
与V2
不同,因为V1
使用字符串作为键,而V2
使用整数作为键。