我有两个OrderedDict
词典,我想检索两个词典中匹配键的值:
>>> from collections import OrderedDict
>>> d1 = OrderedDict()
>>> d2 = OrderedDict()
>>> d1["A"] = 2
>>> d1["B"] = 3
>>> d1["C"] = 2
>>> d2["D"] = 90
>>> d2["B"] = 11
>>> d2["C"] = 25
>>> # search both dicts and output values where key matches
(3, 11)
(2, 25)
答案 0 :(得分:5)
print [(d1[key], d2[key]) for key in d1.viewkeys() & d2]
# [(2, 25), (3, 11)]
d1.viewkeys() & d2
用于获取两个词典中存在的键。一旦我们得到了,只需从两个词典中获取与之对应的值。
这是有效的,因为,根据Dictionary View Objects Python 2.7 Documentation,
键视图设置类似,因为它们的条目是唯一且可清除的。
由于viewkeys
已经设置为类似,我们可以直接对它们使用set操作。
注意:如果您使用的是Python 3.x,那么您必须使用keys
函数,就像这样
print([(d1[key], d2[key]) for key in d1.keys() & d2])
因为,根据Dictionary View Objects Python 3.x Documentation,
dict.keys(),dict.values()和dict.items()返回的对象是视图对象。
由于keys
本身会返回一个视图对象,并且由于它们的条目是唯一且可清除的,因此我们可以像设置一样使用它。
注意:在Python 2.x中,dict.keys
返回键列表。由于我们无法对列表进行集合操作,因此我们无法使用Python 3.x解决方案。
答案 1 :(得分:4)
a = d1.keys()
b = d2.keys()
for i in range(0, len(a)):
for j in range(0, len(b)):
if (a[i]==b[j]):
print d1[a[i]], d2[b[j]]
答案 2 :(得分:3)
你可以轻松地做到:
res = [(d1[i], d2[i]) for i in d1 if i in d2]
>>> print res
[(3, 11), (2, 25)]