我有以下形式的两个大型python词典,我想比较它们并报告相同索引的错误,相同的键。字典具有相同的键,但元组的长度不相同。
d1 = {'a':(1,2,3,4,66,6,6,64), 'b':(3,2,5,3,2,1,1,1)}
d2 = {'a':(1,2,4,3,66,6,6,64), 'b':(1,8,5,3,2,1,22,9)}
例如,对于键' a',索引2和3的不同值。 由于字典很大且元组长度不一定相等,我的业余循环方法不起作用。
for k1,v1 in dict1:
for k2, v2 in dict2:
if k1 == k2:
for i in range(len(v1)):
for j in range(len(v2)):
if i==j:
if v1[i] != v2[j]:
print k1, v1[i]
print k2, v2[i]
答案 0 :(得分:1)
这是一个开始:
for k in d1:
if k not in d2:
continue
v1, v2 = d1[k], d2[k]
for i in xrange(min(len(v1), len(v2))):
if v1[i] != v2[i]:
print k, i, v1[i]
print k, i, v2[i]
打印:
a 0 1
a 0 2
a 1 2
a 1 33
a 2 3
a 2 4
a 3 4
a 3 5
b 0 3
b 0 1
b 1 2
b 1 8
b 2 2
b 2 5
b 3 1
b 3 3
确定这是否是你想要的。如果dicts没有相同的密钥怎么办?不同长度的元组怎么样?等等全部图出来,你可以调整上面做你想做的事情; - )
答案 1 :(得分:1)
假设您要处理在两个字典中找到的所有键,而不管字典迭代器返回它们的顺序,那么执行以下操作:
d1k = set(d1.keys())
for d in d1k.intersection(d2.keys()):
# handle tuple comparison
如果你想在不考虑订购或重复的情况下处理元组比较,那么就像:
if len d1[d] < d2[d]:
for v in d1[d]:
if v not in d2[d]:
print d, v
else:
for v in d2[d]:
if v not in d1[d]:
print d, v