如何使用带lambda参数的reduce函数生成键相同、值为同键求和结果的新字典
实现代码
首先需要提前导入functools模块中的reduce方法(Python 3起reduce不再是内置函数,统一归到functools模块下),一行实现的代码如下:
from functools import reduce # 原始数据 fruit = [{"apple": 10, "pear": 20, "banana": 30, "strawberry": 50}, {"apple": 12, "pear": 5, "banana": 20, "strawberry": 5}, {"apple": 15, "pear": 26, "banana": 32, "strawberry": 8}] # 一行reduce实现同键求和 result = reduce(lambda acc, cur: {k: acc[k] + cur[k] for k in acc}, fruit, {k: 0.0 for k in fruit[0]})
运行后打印result即可得到预期输出:
{'apple': 37.0, 'pear': 51.0, 'banana': 82.0, 'strawberry': 63.0}
逻辑说明
- lambda接收两个参数:
acc是存储累计结果的临时字典,cur是当前遍历到的列表中的单个字典 - 用字典推导式遍历所有键,对同键的值做累加,初始值设置为
0.0直接保证了最终结果的数值类型为float - reduce的第三个参数是累加的初始字典,提前提取了原字典所有键,保证最终输出的键和原字典完全一致
内容的提问来源于stack exchange,提问作者AiKw
相关产品推荐
相关产品推荐

