我是一名Java开发人员;然而,偶尔由于aws lambda for Java中的冷启动,我决定将python用于简单的lambda,因为它不需要编译,从而消除了冷启动。
问题是:我有一个字典列表,我从Dynamo检索到它,简而言之,一个有效的例子是下面的
[
{
"data":"data",
"Count": 60
},
{
"data":"data",
"Count": 60
}
]
我试图通过执行以下操作来获得Count字段的总和,从而减少这一点;然而,我不明白我错过了什么。
reduce(lambda x, y: int(x['Count']) +
int(y['Count']), query_response)
"errorMessage": "'int' object is not iterable"
失败
做这件事的正确方法是什么?
提前谢谢。
要求和,请使用sum
,而不是reduce
。
>>> query_response = [{'data': 'data', 'Count': 60}, {'data': 'data', 'Count': 60}]
>>> sum(x['Count'] for x in query_response)
120
这也使用了生成器表达式。
您需要给x
一个初始值0:
>>> from functools import reduce
>>> query_reponse = [
... {
... "data": "data",
... "Count": 60
... },
... {
... "data": "data",
... "Count": 60
... }
... ]
>>> reduce(lambda x, y: x + y["Count"], query_reponse, 0)
120
理想情况下,您希望使用更具描述性的变量名称,例如:
>>> reduce(lambda total, d: total + d["Count"], query_reponse, 0)
120
有关更多信息,请查看functools.reduce
的文档
正如另一个答案所表明的那样,您可能希望将sum()
用于此类小任务。然而,我仍然认为了解reduce
的工作原理很重要,因为它在PySpark/Spark
或其他语言中很普遍。