gpt4 book ai didi

python - 在字典列表中添加元素

转载 作者:太空狗 更新时间:2023-10-29 21:32:54 25 4
gpt4 key购买 nike

我有一长串带有字符串索引和整数值的字典。许多键在字典中都是相同的,尽管不是全部。我想生成一个字典,其中键是单独字典中键的并集,值是每个字典中与该键对应的所有值的总和。 (例如,组合字典中键 'apple' 的值将是第一个中 'apple' 值的总和,加上第二个中 'apple' 值的总和,依此类推。)

我有以下内容,但它相当麻烦并且需要 ages 来执行。有没有更简单的方法来达到相同的结果?

comb_dict = {}  
for dictionary in list_dictionaries:
for key in dictionary:
comb_dict.setdefault(key, 0)
comb_dict[key] += dictionary[key]
return comb_dict

最佳答案

这里有一些微基准测试表明 f2(见下文)可能是一种改进。 f2 使用 iteritems 可以避免在内部循环中进行额外的字典查找:

import collections
import string
import random

def random_dict():
n=random.randint(1,26)
keys=list(string.letters)
random.shuffle(keys)
keys=keys[:n]
values=[random.randint(1,100) for _ in range(n)]
return dict(zip(keys,values))

list_dictionaries=[random_dict() for x in xrange(100)]

def f1(list_dictionaries):
comb_dict = {}
for dictionary in list_dictionaries:
for key in dictionary:
comb_dict.setdefault(key, 0)
comb_dict[key] += dictionary[key]
return comb_dict

def f2(list_dictionaries):
comb_dict = collections.defaultdict(int)
for dictionary in list_dictionaries:
for key,value in dictionary.iteritems():
comb_dict[key] += value
return comb_dict

def union( dict_list ):
all_keys = set()
for d in dict_list:
for k in d:
all_keys.add( k )
for key in all_keys:
yield key, sum( d.get(key,0) for d in dict_list)

def f3(list_dictionaries):
return dict(union( list_dictionaries ))

结果如下:

% python -mtimeit -s"import test" "test.f1(test.list_dictionaries)"
1000 loops, best of 3: 776 usec per loop
% python -mtimeit -s"import test" "test.f2(test.list_dictionaries)"
1000 loops, best of 3: 432 usec per loop
% python -mtimeit -s"import test" "test.f3(test.list_dictionaries)"
100 loops, best of 3: 2.19 msec per loop

关于python - 在字典列表中添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3366170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com