我想要减少一系列词典
foo = [{'value': 45}, {'value': 2}, {'value': 3}, {'value': 0}]
reduce(lambda x, y: x['value']+y['value'] , foo)
给我以下错误
TypeError: 'int' object has no attribute '__getitem__'
我最终做的是首先使用理解来创建一个简单的数组。
reduce(lambda x, y: x+y, [x['value'] for x in foo])
答案 0 :(得分:3)
reduce(function, [a, b, c])
相当于function(function(a, b), c)
。
因此,function
的结果必须适合作为function
的第一个参数。
为了说明,这有效:
>>> reduce(lambda x, y: {'value': x['value']+y['value']} , foo)
{'value': 50}
答案 1 :(得分:2)
您使用reduce
错误。
from functools import reduce
foo = [{'value': 45}, {'value': 2}, {'value': 3}, {'value': 0}]
reduce(lambda acc, item: acc + item['value'], foo, 0)
一旦针对累加器减少列表项,就不会相互列出项目。
答案 2 :(得分:0)
如果您要对整数值求和
您可以减少使用运算符库中的内置函数:
from functools import reduce
from operator import add, itemgetter
reduce(add, map(itemgetter('value'), foo))