Python如何用map、lambda、reduce替代for循环实现最高销售额书籍统计
实现方案
完全基于map、reduce、lambda实现,无任何显式for循环,运行结果和原函数完全一致。
完整代码
from functools import reduce def max_book_product(orders): # 提取所有订单中的书籍条目,将嵌套结构扁平化 all_books = reduce(lambda pre, cur: pre + cur, map(lambda order: order[1:], orders)) # 累计每个书号的总销售额 total_sales = reduce( lambda acc, book: {**acc, book[0]: acc.get(book[0], 0) + book[1] * book[2]}, all_books, {} ) # 取出销售额最高的条目转为列表返回 return list(max(total_sales.items(), key=lambda item: item[1]))
逻辑说明
- 先用
map提取每个订单中除订单号外的所有书籍元组,再通过reduce将嵌套的列表拼接为一维的书籍列表,得到所有待计算的书籍条目 - 用
reduce做累积计算,初始值为空字典,每处理一个书籍元组就更新对应书号的总销售额,字典解包语法{**d, key: value}用来生成新字典避免修改原累积对象 - 最后用
max函数直接取销售额最高的键值对,转成列表即可得到预期输出
内容的提问来源于stack exchange,提问作者bart
相关产品推荐
相关产品推荐

