Python 添加到For循环上的列表(我最初应该将列表设置为什么?)
这是一个初学者的问题 我将有一个字典,在它们的列表中有不同数量的值Python 添加到For循环上的列表(我最初应该将列表设置为什么?),python,python-3.x,Python,Python 3.x,这是一个初学者的问题 我将有一个字典,在它们的列表中有不同数量的值 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应等于
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子句之前创建此列表 您可以将映射
与操作符一起使用。添加
:
>>> from operator import add
>>> map(add,*dict1.values())
[3, 5, 7]
>>> map(add,*dict2.values())
[4, 6, 8, 10]
或者,如果您不想导入任何内容,请使用列表理解
:
>>> [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]
使用zip
:和
这实际上是家庭作业,所以我不能导入任何内容。@Neil我添加了另一个解决方案,它不使用导入:我得到的是:AttributeError:'dict'对象没有属性'itervalues'。顺便说一下,我正在使用Python3.3.2。@Neil看起来您正在使用py3.x,解决方案已更新。现在它可以在py2.x和3.x上运行了。非常感谢。我的家庭作业是找到民主党参议员的平均投票记录,在你的帮助下,我可以一行就完成。
>>> 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]
>>> list(map(sum, zip(*dict1.values()))) #py3.x
[3, 5, 7]
>>>
>>> map(sum, zip(*dict2.values())) #py2.x
[4, 6, 8, 10]
>>>