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.Counter
和 sum
将值累积到一个新字典中:
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
对象变成普通字典,并将键变回元组。
我有一本字典,其中的键是一个元组。其中一些元组是彼此的排列(例如 (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.Counter
和 sum
将值累积到一个新字典中:
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
对象变成普通字典,并将键变回元组。