2016-12-28 58 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代替字典密钥而不是元组。然后,您可以随时添加它们,而无需担心订购。