减少字典数组

时间:2017-06-21 13:13:55

标签: python reduce

我想要减少一系列词典

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

3 个答案:

答案 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))