Python 减少词典列表

Python reduce in list of dictionaries

我是一名 Java 开发人员;然而,偶尔由于 Java 的 aws lambda 冷启动,我决定对简单的 lambda 使用 python,因为它不需要编译,消除了冷启动。

问题: 我有一个字典列表,我从 Dynamo 检索它,简而言之,一个有效的例子如下

[
   {
    "data":"data",
    "Count": 60
   },
   {
    "data":"data",
    "Count": 60
   }
]

我正在尝试通过执行以下操作获取计数字段的总和来减少;但是,我不明白我错过了什么。

reduce(lambda x, y: int(x['Count']) +
                  int(y['Count']), query_response)

失败 "errorMessage": "'int' object is not iterable"

执行此操作的正确方法是什么?

提前致谢。

你需要给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.<b>reduce</b>

的文档

正如另一个答案所暗示的那样,您可能想使用 sum() 来完成这样的小任务。但是,我仍然认为学习 reduce 的工作原理很重要,因为它在 PySpark/Spark 或其他语言中很流行。

要求和,请使用 sum,而不是 reduce

>>> query_response = [{'data': 'data', 'Count': 60}, {'data': 'data', 'Count': 60}]
>>> sum(x['Count'] for x in query_response)
120

这也使用了generator expression