当前位置: 首页 > 知识库问答 >
问题:

在2.6[重复]上合并N字典和添加值的最快方法

谷梁玺
2023-03-14

我有一个字典列表,我想把它们组合成一个字典,并在列表中添加每个字典的值。例如:

ds = [{1: 1, 2: 0, 3: 0}, {1: 2, 2: 1, 3: 0}, {1: 3, 2: 2, 3: 1, 4: 5}]
merged = {1: 6, 2: 3, 3: 1, 4: 5}
from collections import defaultdict

merged = defaultdict(int)

for d in ds:
    for k, v in d.items():
        merged[k] += v

在Python 2.6中有没有更快的方法来实现这一点?

共有1个答案

关宏毅
2023-03-14

DefaultDict仍然是最快的,我找到了几种通过缓存函数名来加快速度的方法,现在又找到了另一种方法,它可以显著加快速度,只需在d中为k迭代,而不是使用d.items()d.iteritems()

到目前为止的一些时间安排:

from random import randrange
ds = [dict((randrange(1, 1000), randrange(1, 1000)) for i in xrange(500))
      for i in xrange(10000)]

# 10000 dictionaries of approx. length 500

from collections import defaultdict

def merge1(dicts, defaultdict=defaultdict, int=int):
    merged = defaultdict(int)
    for d in dicts:
        for k in d:
            merged[k] += d[k]
    return merged

def merge2(dicts):
    merged = {}
    merged_get = merged.get
    for d in dicts:
        for k in d:
            merged[k] = merged_get(k, 0) + d[k]
    return merged


def merge3(dicts):
    merged = {}
    for d in dicts:
        for k in d:
            merged[k] = merged[k] + d[k] if k in merged else 0
    return merged


from timeit import timeit
for func in ('merge1', 'merge2', 'merge3'):
    print func, timeit(stmt='{0}(ds)'.format(func),
                       setup='from __main__ import merge1, merge2, merge3, ds',
                       number=1)
merge1 0.992541510164
merge2 1.40478747997
merge3 1.23502204889

 类似资料:
  • 问题内容: 我正在尝试合并来自多个服务器的日志。每个日志都是一个元组列表(,)。可能会出现多次,并且我希望结果字典能够保存所有服务器的所有计数之和。 这是我的尝试,例如一些数据: 这使: 如预期的那样。 我要去吃香蕉,因为有一位同事看到了密码。 她坚持认为,必须有一种更加Python化和优雅的方法来做到这一点,而这些方法不能嵌套在循环中。有任何想法吗? 问题答案: 我认为没有比这更简单的了: 请注

  • 问题内容: 对于学校,我正在为游戏的排名列表编写一个小程序。为此,我使用字典,将玩家的名称作为键名,将分数作为键值。将有10场比赛,每场比赛都有一个自动排名系统,我将其打印到文件中。香港专业教育学院已经设法编码排名系统,但现在我面临更大的挑战,我无法解决: 我必须进行总体排名,这意味着someplayername可以在具有多个得分的多个比赛中使用,但我只需要保留重复项中的最高得分即可。 简而言之

  • 我要做的是合并几行数据以显示为单行。基于行的最高值。因此只保留具有最高值的记录 由此得出: 对此: 欢迎提出任何建议。 多谢了。

  • 我有一个简单的空数据表。 现在我读取了一个json文件,并用它创建了一个字典列表。 该列表中有许多类似以下内容的词典 我试图将所有这些字典都推入我的变量中,但无论怎么做,所有的形状或索引都被搞乱了。

  • 问题内容: 我有一个Python程序,可与字典配合使用。我必须复制字典数千次。我需要密钥和关联内容的副本。该副本将被编辑,并且不得链接到原始副本(例如,副本中的更改不得影响原始副本。) 键是字符串,值是整数(0/1)。 我目前使用一种简单的方法: 对我的代码进行性能分析表明,复制操作花费了大部分时间。 有没有更快的替代方法?什么是最快的? 问题答案: 查看Python操作的C源代码,您会发现它们做

  • 问题内容: 我正在尝试合并三个具有相同键,值列表或单个值的字典。 我需要将值中的所有项目添加到一个列表中。 我尝试了几种方法,但是大多数方法将值放入嵌套列表中。例如 我尝试通过遍历值来更新它: 但结果完全一样。我试图简单地添加列表,但是由于第三个字典只有一个浮点数,所以我做不到。 因此,我尝试首先以1和2的值添加列表,然后附加3的值。添加列表效果很好,但是当我尝试从第三个字典中添加浮点数时,突然整