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

