在python字典键中查找最大重复值

在python字典键中查找最大重复值,python,dictionary,Python,Dictionary,我有python字典 d = {(2,4):40,(1,2,4):8} 在这个dict中,键是元组, 值是元组中每个元素的计数 我需要多输出一本字典作为参考 所有元组中值的总计数 out={2:48,4:48,1:8} 我给出的示例是小字典,但我有非常大的字典,所以时间复杂性起着关键作用 有人能帮我吗?您可以在一次传递中完成此操作,只需迭代键并添加相应的值。您可以使用collections.Counter或任何您喜欢的dict/dict类容器: >>> origin = {

我有python字典

d = {(2,4):40,(1,2,4):8}
在这个dict中,键是元组, 值是元组中每个元素的计数

我需要多输出一本字典作为参考 所有元组中值的总计数

out={2:48,4:48,1:8}
我给出的示例是小字典,但我有非常大的字典,所以时间复杂性起着关键作用
有人能帮我吗?

您可以在一次传递中完成此操作,只需迭代键并添加相应的值。您可以使用
collections.Counter
或任何您喜欢的dict/dict类容器:

>>> origin = {(2,4):40,(1,2,4):8}
>>> from collections import Counter
>>> counts = Counter()
>>> for k, v in origin.items(): # python 2 use .iteritems()
...     for x in k:
...         counts[x] += v
...
>>> counts
Counter({2: 48, 4: 48, 1: 8})

我们可以利用multiple的功能轻松地求和,创建一些简洁的一行程序,但它们的性能无法与之竞争(原始
dict
的计时):


你想找到最重要的吗?例如4或2,因为它们都有48?Hm。您使用
计数器
,而不使用其计数能力。它没有普通的
dict
做不到的事情(或者
defaultdict(int)
)。@schwobasegl当然我使用它的计数能力。没有任何其他dict做不到的事情。@schwobasegl是吗?这是最直接的方法。它速度快,内存效率高。我不认为它错;)我只是认为这是一个糟糕的例子,向某人展示了一个
计数器
,其固有的优点是它的性能构造函数可以传递一个iterable,但将OP引入
defaultdict
的机会要大得多。
from collections import Counter
from operator import add
from functools import reduce

# 1
out = sum((Counter({x: v for x in k}) for k, v in d.items()), Counter())
# timeit: 16.2

# 2
out = reduce(add, (Counter({x: v for x in k}) for k, v in d.items()))
# timeit: 10.8

# 3
# juanpa's approach
# timeit: 3.7
Dict = {(2,4):40,(1,2,4):8}    
Out={}

for k,v in Dict.items():
    for i in k:
        if i in Out:
            Out[i] += v
        else:
            Out[i] = v

print(Out)

{2: 48, 4: 48, 1: 8}