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。
我是一名 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。