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

Python字典值累加而非覆盖的实现问题

问题需求

我是编程新手,需要从存储购买商品信息的CSV文件中,把已过期商品的数量累加后存入字典。但当前代码会将字典中商品的数量覆盖为最后一行的值,无法实现累加,求修改方法。

CSV示例数据

id,product_name,buy_date,buy_price,quantity,exp_date
1,apple,2022-01-26,0.8,38,2022-01-10
2,apple,2022-01-26,0.8,71,2022-01-10
3,banana,2022-01-26,0.8,62,2022-01-10
4,banana,2022-01-26,0.8,51,2022-01-10
5,grape,2022-01-26,1,45,2022-01-10
6,grape,2022-01-26,1,31,2022-01-10

当前代码及错误输出

代码

expired_dict ={}
with open("bought.csv", "r") as File:
    for row in csv.DictReader(File):
        if today() > row["exp_date"]:            
            expired_dict.update({row["product_name"]:[row["quantity"]]})

错误输出

{'apple': ['71'], 'banana': ['51'], 'grape': ['31']}
解决方法

问题根源

当前代码用update方法直接覆盖字典条目,且把数量存成了字符串列表,完全没有累加逻辑,所以只会保留最后一行的数值。要实现累加,需要调整核心逻辑:

修改后的基础版代码

import csv
from datetime import datetime

def today():
    # 确保返回的日期格式和CSV中的一致
    return datetime.now().strftime("%Y-%m-%d")

expired_dict ={}
with open("bought.csv", "r") as File:
    reader = csv.DictReader(File)
    for row in reader:
        # 把日期字符串转成datetime对象,避免字符串直接比较的潜在问题
        exp_date = datetime.strptime(row["exp_date"], "%Y-%m-%d")
        current_date = datetime.strptime(today(), "%Y-%m-%d")
        
        if current_date > exp_date:
            product = row["product_name"]
            # CSV读取的数量是字符串,必须转成整数才能累加
            quantity = int(row["quantity"])
            
            # 判断商品是否已在字典中,存在则累加,不存在则初始化
            if product in expired_dict:
                expired_dict[product] += quantity
            else:
                expired_dict[product] = quantity

简化版(用collections.defaultdict)

如果不想每次判断商品是否存在,可以用defaultdict自动初始化值为0,代码更简洁:

import csv
from datetime import datetime
from collections import defaultdict

def today():
    return datetime.now().strftime("%Y-%m-%d")

# 默认值为0,无需手动判断初始化
expired_dict = defaultdict(int)
with open("bought.csv", "r") as File:
    reader = csv.DictReader(File)
    for row in reader:
        exp_date = datetime.strptime(row["exp_date"], "%Y-%m-%d")
        current_date = datetime.strptime(today(), "%Y-%m-%d")
        
        if current_date > exp_date:
            product = row["product_name"]
            quantity = int(row["quantity"])
            expired_dict[product] += quantity

正确输出

{'apple': 109, 'banana': 113, 'grape': 76}

内容的提问来源于stack exchange,提问作者Seantjuh91

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:31