这是一个初学者的问题.
我将在他们的列表中有一个具有不同数量值的字典.
dict1 = {'a': [0,1,2], 'b': [3,4,5]}
dict2 = {'a': [0,1,2,3], 'b': [4,5,6,7]}
对于每个dict,列表中的项目数相同.
LEN(dict1['a']) == LEN(dict1['b'])
LEN(dict1['a']) != LEN(dict2['b'])
有了这个,这是我的问题.我试图将字典中的值一起添加.
dict1应该等于[3,5,7]
dict2应该等于[4,6,8,10]
到目前为止我的代码是这样的:
for x in dict1:
results = [dict1[x][i] + results[i] for i in range(len(dict1[x]))]
我遇到的问题是结果[i].我在for子句之前创建此列表吗?
最佳答案 您可以使用map与operator.add:
>>> from operator import add
>>> map(add,*dict1.values())
[3, 5, 7]
>>> map(add,*dict2.values())
[4, 6, 8, 10]
或者如果您不想导入任何内容,则使用列表理解为zip
:
>>> [sum(x) for x in zip(*dict1.values())]
[3, 5, 7]
>>> [sum(x) for x in zip(*dict2.values())]
[4, 6, 8, 10]
更新:
def func(dic, *keys):
return [sum(x) for x in zip(*(dic[k] for k in keys))]
>>> dict1 = {'a': [0,1,2], 'b': [3,4,5], 'c':[6,7,8]}
>>> func(dict1,'a')
[0, 1, 2]
>>> func(dict1,'a','b')
[3, 5, 7]
>>> func(dict1,'b','c')
[9, 11, 13]
>>> func(dict1,'b','c','a')
[9, 12, 15]