我有两个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')]
。怎么做??
答案 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')
不同。