使用DictWriter写入含列表值的字典时遇格式问题
解决CSV写入格式不符问题
你的核心问题是代码逻辑不符合需求:原代码试图用DictWriter配合zip(*final_dict.values())写入,但这种写法会把各网站的水果列表按位置拆分,生成多列多行的格式,和你想要的「每行对应一个网站+逗号分隔的列表」完全不符。
正确实现方案
方案1:用csv.writer直接写入(推荐,更直观)
import csv # 假设你的爬取结果字典是这个 final_dict = {'Website A': ['apple','orange','pear'], 'Website B': ['apple','watermelon'], 'Website C': ['orange','pear']} with open('test.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile, delimiter=';') # 写入表头 writer.writerow(['Website', 'Fruits']) # 遍历字典,每行写入网站名和逗号拼接的水果列表 for site_name, fruit_list in final_dict.items(): writer.writerow([site_name, ','.join(fruit_list)])
方案2:用DictWriter实现(适合需要固定字段的场景)
import csv final_dict = {'Website A': ['apple','orange','pear'], 'Website B': ['apple','watermelon'], 'Website C': ['orange','pear']} with open('test.csv', 'w', newline='', encoding='utf-8') as csvfile: # 定义表头字段 fieldnames = ['Website', 'Fruits'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=';') writer.writeheader() # 构造每个网站对应的字典条目并写入 for site_name, fruit_list in final_dict.items(): writer.writerow({ 'Website': site_name, 'Fruits': ','.join(fruit_list) })
输出效果
运行后CSV内容会是:
Website;Fruits Website A;apple,orange,pear Website B;apple,watermelon Website C;orange,pear
内容的提问来源于stack exchange,提问作者wooziecodes
相关产品推荐
相关产品推荐

