比较相同索引的Python词典

时间:2013-09-26 01:27:23

标签: python dictionary

我有以下形式的两个大型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]

2 个答案:

答案 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