当键是两个字符串的组合时,python字典匹配两个字典中的键

时间:2015-05-08 05:54:36

标签: python dictionary

我有两个python词典:

dictA = {('a','b') : 1,('a','c') : 3,('b','c') : 1}
dictB = {('b','a') : 4,('a','d') : 6,('b','c') : 2}

我想比较dictA和dictB的键用于公共键。我试过了

comm = set(dictA.keys()) & set(dictB.keys())

但是,这只会返回('b','c')

但是,在我的情况下,两个字典中的第一个键是相同的,即dictA[('a','b')]等同于dictB[('b','a')]。怎么做??

3 个答案:

答案 0 :(得分:1)

我有一个更紧凑的方法。

我认为它更具可读性和易懂性。您可以参考如下:

这些是你的变种:

dictA = {('a','b') : 1,('a','c') : 3,('b','c') : 1}
dictB = {('b','a') : 4,('a','d') : 6,('b','c') : 2}

根据您的要求解决此问题:

print [ a for a in dictA if set(a) in [ set(i) for i in dictB.keys()]]

所以你可以得到你想要的答案。

[('b', 'c'), ('a', 'b')]

答案 1 :(得分:1)

另一种解决方案,虽然不如Tony所建议的那么优雅:

setA = [ frozenset(i) for i in dictA.keys() ]
setB = [ frozenset(i) for i in dictB.keys() ]
result = set(setA) & set(setB)
print( [tuple(i) for i in result] )

它使用frozenset来构造两组集合。这是您将获得的输出类型:

[('b', 'c'), ('b', 'a')]

答案 2 :(得分:0)

返回('b','c')是正确的答案。元组('a', 'b')与元组('b', 'a')不同。