Python在字典列表中减少



我是一名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或其他语言中很普遍。

相关内容

  • 没有找到相关文章

最新更新