Python新手求助:如何按品类分组计算CSV文件中商品总价格
解决按品类计算CSV总价格的问题
嘿,作为Python新手遇到分组计算的问题太正常啦,我来帮你一步步搞定它!
首先咱们先梳理下你现有代码的问题:你现在只是把单个商品的价格排了序输出,但完全没涉及到计算每个商品的总价(数量×单价),也没有按品类做分组累加。另外你重复打开了两次文件,这其实没必要,with语句已经帮你处理好文件的打开和关闭啦。
核心思路
要实现按品类计算总价格,咱们需要做这几步:
- 遍历CSV里的每一行数据
- 计算单个商品的总价:
数量 × 单个商品价格 - 把这个总价累加到对应品类的总和里
- 最后格式化输出每个品类的总金额
方法一:用普通字典手动处理
这种方法逻辑清晰,适合新手理解基础原理:
import csv # 初始化字典,用来存储每个品类的总价格 category_totals = {} with open('shopping_cart.csv', 'r') as f: # 使用DictReader,能直接通过列名(比如category、quantity)访问数据,不用记索引位置 reader = csv.DictReader(f) for row in reader: # 把字符串类型的数量和价格转成数值类型,方便计算 quantity = int(row['quantity']) individual_price = float(row['individual_price']) # 计算当前商品的总价 item_total = quantity * individual_price # 把总价累加到对应品类的总和里 category = row['category'] if category in category_totals: category_totals[category] += item_total else: # 如果品类第一次出现,先初始化总和为当前商品总价 category_totals[category] = item_total # 格式化输出结果,保留两位小数更符合价格的显示习惯 for category, total in category_totals.items(): print(f"{category}: ${total:.2f}")
方法二:用collections.defaultdict简化代码
如果不想每次都判断品类是否在字典里,可以用defaultdict,它会自动给不存在的键设置默认值(这里我们设为float类型的0.0),代码会更简洁:
import csv from collections import defaultdict # 初始化defaultdict,默认值为0.0 category_totals = defaultdict(float) with open('shopping_cart.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: quantity = int(row['quantity']) individual_price = float(row['individual_price']) item_total = quantity * individual_price # 直接累加,不用判断键是否存在 category_totals[row['category']] += item_total # 输出结果 for category, total in category_totals.items(): print(f"{category}: ${total:.2f}")
最终输出结果
运行上面的代码,你会得到正确的分组总价格:
shirts: $109.34 pants: $534.98
内容的提问来源于stack exchange,提问作者WizardCube86
相关产品推荐
相关产品推荐

