2016-12-28 22 views
3

我有一個字典,其中的元素是一個元組。這些元組中的一些是彼此的置換(例如(1, 2) vs (2, 1))。我想添加一個排列的值到另一個,然後擺脫第二個排列。Python:爲字典中的元組置換添加值和刪除條目

d = {(1, 3): 14, (1, 4): 13, (1, 2): 10, (11, 11): 19, (3, 1): 50, (4, 1): 5, ...} 

應該

{(1, 3): 64, (1, 4): 18, (1, 2): 10, (11, 11): 19, ...} 

我想過對它們進行排序,然後做基於字典位置的東西,但這個不是很容易擴展。歡迎輸入!

回答

1

由於@wim建議,你應該使用frozenset,那麼你可以使用collections.Countersum的值累積到一個新的字典:

from collections import Counter 

d = {(1, 3): 14, (1, 4): 13, (1, 2): 10, (11, 11): 19, (3, 1): 50, (4, 1): 5} 

r = sum((Counter({frozenset(k): v}) for k, v in d.items()), Counter()) 
print(r) 
# Counter({frozenset({1, 3}): 64, frozenset({11}): 19, frozenset({1, 4}): 18, frozenset({1, 2}): 10}) 

您可以調節Counter對象爲香草和字典如果你希望使用字典理解,那麼這些關鍵字將返回給元組。

2

使用frozenset代替字典密鑰而不是元組。然後,您可以隨時添加它們,而無需擔心訂購。