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

Python将字典内带千分位逗号的字符串列表转整数求和导出CSV

解决方案

你写的count_doses_by_date存在两个核心问题,对应修正方式如下:

  • 函数本身设计为接收main生成的日期-剂量字典作为入参,不需要在函数内部重复实现CSV读取、字典构建逻辑,这部分冗余代码可以直接删除,直接处理传入的字典即可。
  • 千分位逗号导致整数转换失败的问题不会破坏CSV结构:csv.reader已经按照CSV的分隔规则完成了字段拆分,你拿到的每个值都是独立字段,字符串内部的逗号全是数值自带的千分位分隔符,直接替换为空字符串后再转整数就可以正常计算。

修正后的完整实现

def count_doses_by_date(dict_dose_by_date):
    import csv
    # 直接处理传入的字典,写入结果文件
    with open('doses.csv', 'w', newline='') as out:
        writer = csv.writer(out)
        # 写入输出文件表头
        writer.writerow(['date', 'total_doses'])
        for date, dose_str_list in dict_dose_by_date.items():
            # 移除数值内的千分位逗号后转整数,再求和
            dose_int_list = [int(s.replace(',', '')) for s in dose_str_list]
            total_doses = sum(dose_int_list)
            # 逐行写入统计结果
            writer.writerow([date, total_doses])

配套调整main函数

原main函数中冗余打开了输出文件,可以直接去掉,处理逻辑放在统计函数中执行即可:

def main():
    import csv
    dict_doses_by_date = {}
    filename_input = str(input("Please enter a .csv file to read: "))
    with open(filename_input, "r") as inp:
        header = inp.readline()
        reader = csv.reader(inp, delimiter=",", quotechar='"')
        for line in reader:
            dict_doses_by_date[line[0]] = line[1:6]
    # 传入结构化字典调用统计函数
    count_doses_by_date(dict_doses_by_date)
    return dict_doses_by_date

说明:使用标准库csv.writer写输出文件比手动拼接字符串更稳妥,会自动处理特殊字符转义,避免输出格式不符合CSV规范。打开文件时加newline=''参数是Python官方推荐的CSV文件读写写法,可以避免不同操作系统下出现多余空行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:45:38