如何在Python中不使用双层for循环遍历嵌套字典完成购物数据统计
不用双层for循环的实现方案
我们的实现目标是统计每位采购员一周7天每日的总采购数量,最终返回{采购员姓名: [日1总量, 日2总量, ..., 日7总量]}格式的结果。
方案1:字典推导式+内置组合函数(仅1层显式循环)
该方案没有显式编写双层for循环,内层遍历由zip、sum隐式完成:
res = { name: [sum(daily_cnt) for daily_cnt in zip(*items.values())] for name, items in groceries.items() }
逻辑说明:
*items.values()会将当前采购员所有商品的采购量列表解包后传入zipzip会按天将不同商品的当日采购量打包为元组sum直接对单日的采购量元组求和,得到当日总采购量
方案2:全隐式循环实现(无任何显式for语句)
如果完全不想写显式for关键字,可以通过map函数实现全隐式遍历:
res = dict( map( lambda x: (x[0], list(map(sum, zip(*x[1].values())))), groceries.items() ) )
方案3:借助pandas实现(适合大规模数据场景)
如果允许使用第三方库,pandas可以更简洁地完成按行求和操作:
import pandas as pd res = {name: pd.DataFrame(items).sum(axis=1).tolist() for name, items in groceries.items()}
运行结果示例:
所有方案最终返回的结果一致:
{ 'tom': [2, 0, 1, 1, 2, 0, 1], 'andy': [2, 1, 1, 1, 2, 0, 2] }
内容的提问来源于stack exchange,提问作者paw4paw
相关产品推荐
相关产品推荐

