减少字典数组
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}
我有一组要减少的词典
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}