2017-08-12 122 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}