减少字典数组

reduce array of dictionaries

我有一组要减少的词典

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

您使用的 reduce 错误。

from functools import reduce

foo = [{'value': 45}, {'value': 2}, {'value': 3}, {'value': 0}]
reduce(lambda acc, item: acc + item['value'], foo, 0)

一次减少针对累加器的列表项,而不是针对彼此的列表项。

如果您尝试对整数值求和

您可以减少使用运算符库中的内置函数:

from functools import reduce
from operator import add, itemgetter

reduce(add, map(itemgetter('value'), foo))

reduce(function, [a, b, c])等同于function(function(a, b), c)。 因此 function 的结果必须适合作为 function.

的第一个参数

为了说明,这个有效:

>>> reduce(lambda x, y: {'value': x['value']+y['value']} , foo)
{'value': 50}