3

这是一个初学者的问题。

我将有一个字典,它们的列表中包含不同数量的值。

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]))]

我遇到的问题是results[i]. 我是否在我的 for 子句之前创建此列表?

4

3 回答 3

4

您可以map使用operator.add

>>> from operator import add
>>> map(add,*dict1.values())
[3, 5, 7]
>>> map(add,*dict2.values())
[4, 6, 8, 10]

或者如果您不想导入zip任何内容,请使用 a :list comprehension

>>> [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]
于 2013-07-12T04:37:27.687 回答
2

使用zipPython 2Python 3

>>> dict1 = {'a': [0,1,2], 'b': [3,4,5]}
>>> dict2 = {'a': [0,1,2,3], 'b': [4,5,6,7]}

>>> zip(dict1['a'], dict1['b'])
[(0, 3), (1, 4), (2, 5)]

>>> [x+y for (x,y) in zip(dict1['a'], dict1['b'])]
[3, 5, 7]
于 2013-07-12T04:38:31.347 回答
1
>>> list(map(sum, zip(*dict1.values()))) #py3.x
[3, 5, 7]
>>> 
>>> map(sum, zip(*dict2.values())) #py2.x
[4, 6, 8, 10]
>>> 
于 2013-07-12T04:39:41.483 回答