在python字典键中查找最大重复值
我有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 = {
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}