You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:13:15