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

导出CSV时如何让字典按键对应值的次数重复写入?

问题分析与解决方案

你的问题根源在于 k*v是对字符串进行重复拼接,而不是将键作为独立元素重复v次。比如'dagger' * 3会生成'daggerdaggerdagger'这个单一字符串,而不是三个独立的'dagger'条目,这就导致CSV里出现了合并后的内容,而非你期望的独立项。

修正后的代码

import csv

def export_inventory(inventory, filename="export_inventory.csv"):
    # 将字典展开为「键按值重复」的列表
    expanded_items = [k for k, v in inventory.items() for _ in range(v)]
    # 加入newline=''避免Windows下出现多余空行(CSV模块官方推荐写法)
    with open(filename, "w", newline='') as csvfile:
        writer = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL)
        # 如果要把所有条目写入同一行的不同列:
        writer.writerow(expanded_items)
        # 如果要每个条目单独占一行,替换成下面这行:
        # writer.writerows([item] for item in expanded_items)

关键说明

  1. 列表推导式展开数据:
    [k for k, v in inventory.items() for _ in range(v)] 会遍历你的字典,把每个键根据对应的值重复添加到列表中,最终生成你期望的结果:['battleaxe', 'dagger', 'dagger', 'dagger', 'gold coin']。
  2. CSV写入的两种方式:
    • writerow(expanded_items):把所有条目写入CSV的同一行,每个条目是一个列。
    • writerows([item] for item in expanded_items):每个条目单独占一行,适合需要每行一个物品的场景。
  3. 关于newline='':这是Python CSV模块官方建议的参数,能避免在Windows系统下写入CSV时出现多余的空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:32:14