2012-08-14 137 views
3

如何比较两个OrderedDict dictionareis?如何比较两个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)]) 

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

它通过迭代和两个列表是有序的,所以应该匹配1和7? 在此先感谢!

+0

感谢您的所有答案!得到它与Simeon的解决方案一起工作。 – Epalissad 2012-08-14 22:04:53

回答

6

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

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

输出:

(1, 4) 
(7, 4) 
+2

感谢您展示了使用zip() – Dave 2013-11-20 13:49:02

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)]) 
1
>>> for x in dict_a.items(): 
    if x in dict_b.items(): 
     print(x) 


(1, 4) 
(7, 4) 
+0

这些是字迹。这里不需要O(n ** 2)解决方案。 – 2012-08-14 21:39:59

+0

这不会保留排序 - 不知道这是OP的意愿或不 – jterrace 2012-08-14 21:40:02

+0

@jterrace:是的。 'items()'的结果是有序的。 – 2012-08-14 21:40:32

0

假设你想要键和值相匹配,但不关心每一个OrderedDict中的位置:

for k, v in dict_a.items(): 
    if v == dict_b[k]: 
    print '(%s, %s)' % (k, v) 
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] 
0

如果您发现它们相等,您可以遍历这些项目并进行打印。

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