如何比较两个OrderedDict词典?

时间:2012-08-14 21:33:57

标签: python

如何比较两个OrderedDict dictionareis?

我的结构如下:

dict_a = OrderedDict([(1,4), (2,5), (3,3), (4,5), (5,4), (6,4), (7,4), (8,3), (9,4)])

dict_b = OrderedDict([(1,4), (2,2), (3,1), (4,4), (5,6), (6,7), (7,4), (8,2), (9,5)])

for values in score_dict.items():
if values == course_dict.values():
    print 'match!'
else:
    print 'No match!'

它迭代通过,两个列表都是有序的,所以它应该匹配1和7? 提前谢谢!

6 个答案:

答案 0 :(得分:8)

您可以使用items()和内置zip()功能:

for i, j in zip(dict_a.items(), dict_b.items()):
    if i == j:
        print(i)

输出:

(1, 4)
(7, 4)

答案 1 :(得分:3)

如果您希望每个有序位置的相交元素相同:

>>> from collections import OrderedDict
>>> dict_a = OrderedDict([(1,4), (2,5), (3,3), (4,5), (5,4), (6,4), (7,4), (8,3), (9,4)])
>>> dict_b = OrderedDict([(1,4), (2,2), (3,1), (4,4), (5,6), (6,7), (7,4), (8,2), (9,5)])
>>> [i1 for i1, i2 in zip(dict_a.iteritems(), dict_b.iteritems()) if i1 == i2]
[(1, 4), (7, 4)]

如果您不在乎订购:

>>> set(dict_a.items()).intersection(set(dict_b.items()))
set([(7, 4), (1, 4)])

答案 2 :(得分:1)

>>> for x in dict_a.items():
    if x in dict_b.items():
        print(x)


(1, 4)
(7, 4)

答案 3 :(得分:1)

如果您发现它们相同,您可以迭代这些项目并进行打印。

In [10]: for a, b in zip(dict_a.items(), dict_b.items()):
   ....:     if a == b:
   ....:         print True
   ....:     else:
   ....:         print False

答案 4 :(得分:0)

假设您希望键和值都匹配,但不关心每个OrderedDict中的位置:

for k, v in dict_a.items():
  if v == dict_b[k]:
    print '(%s, %s)' % (k, v)

答案 5 :(得分:0)

如果您想在OrderedDict中包含索引作为比较的一部分:

>>> [a[0] for a, b in zip(dict_a.items(), dict_b.items()) if a == b]
[1, 7]

如果您想获得两个OrderedDicts中具有相同值的所有键,无论顺序如何:

>>> [k for k, v in dict_a.items() if k in dict_b and dict_b[k] == v]
[1, 7]