2017-08-12 128 views
0

当前我创建了一个使用元组对作为关键字的字典。我的字典目前单独计算对(如(a,b)和(b,a)),但我最终希望(a,b)==(b,a)。以元组为关键字的字典

目前我的代码的部分看起来像这样:

final = collections.defaultdict(list) 
for a,b in pairs: 

    final[(a[0],b[0])].append((a[2],a[1])) 
    final[(b[0],a[0])].append((b[2],b[1])) 

我将不得不检查(B,A)的(A,B)已经存在于词典中之前将它?或者在完成所有词典后修复词典?

+0

所以你不想重复? – clabe45

+0

是的。如果(a,b)或(b,a)没有创建(b,a)键(如果可能的话),我希望它将值添加到(a,b)键 – Hello

+0

在'(a,b) '钥匙,'a'和'b'永远相等吗? –

回答

1

使用frozenset([a, b])。无论顺序如何,集合都相等,但只有frozensets可以用作字典键,因为它们是不可变的。

如果a == b虽然您的密钥将等于frozenset([a])。如果这是一个问题,我们可以制定计划。

0
pairs = [frozenset([1,2]), frozenset([3,4]), frozenset([2,1]), 
frozenset([5,6]), frozenset([7,8]), frozenset([6,5])] 

for pair in pairs: 
    pair_count.update({pair: pair_count.get(pair, 0) + 1}) 

pair_count 
{frozenset([5, 6]): 2, frozenset([1, 2]): 2, frozenset([8, 7]): 1, frozenset([3, 4]): 1}