Python:为字典中的元组排列添加值和删除条目

Python: Add Values and Remove Entry for Tuple Permutations in a Dictionary

我有一本字典,其中的键是一个元组。其中一些元组是彼此的排列(例如 (1, 2)(2, 1))。我想将一个排列的值加到另一个排列上,然后去掉第二个排列。

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, ...}

我考虑过对它们进行排序,然后根据字典中的位置做一些事情,但这不太容易扩展。欢迎输入!

使用 frozenset 作为字典键而不是元组。然后你可以边做边添加它们,而不用担心订购。

正如@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 对象变成普通字典,并将键变回元组。