从字典列表写入CSV文件,每个键都有多个值?

2024-10-03 17:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

results = [
            {"Name" : "Name1", "Issues" : ["issue1", "issue2",    "issue3"]},
            {"Name" : "Name2", "Issues" : "issue1"},
            {"Name" : "Name3", "Issues" : ["issue2", "issue4"]},
            {"Name" : "Name4", "Issues" : "issue4"}
            ]

这是我的示例字典,下面是我用来将其写入CSV文件的代码。在

^{pr2}$

这是电流输出

Name,Issues
Name1,['issue1', 'issue2', 'issue3']
Name2,issue1
Name3,['issue2', 'issue4']
Name4,issue4

正如您所见,有时每个名称都有多个问题。我要他们用不同的分隔符来分隔它们。例如

Name,Issues
Name1,issue1 issue2 issue3
Name2,issue1
Name3,issue2 issue4
Name4,issue4

我如何实现这一点?我想知道答案,尤其是用dict-writer模块。在


Tags: 文件csvname示例字典resultsissuesname1
1条回答
网友
1楼 · 发布于 2024-10-03 17:26:16

有一种方法:

for result in results:
    writer.writerow({k:' '.join(v) if isinstance(v, list) else v
                    for k,v in result.items()})

.writerow()需要一个字典,字典的键和值都是字符串。因为字典的值有时是列表,所以我们需要一些代码将列表转换为字符串。在

以下是我使用的技巧的说明:

^{pr2}$


编辑

对于下面的注释中描述的新要求,我可以这样做:

with open('output.txt', 'w') as output_file:
    writer = csv.writer(output_file,
                        dialect ="excel",
                        delimiter=',')
    writer.writerow(["Name", "Issues"])
    for result in results:
        row = []
        row.append(result["Name"])
        if isinstance(result["Issues"], list):
            row.extend(result["Issues"])
        else:
            row.append(result["Issues"])
        writer.writerow(row)

请注意,我们已经从csv.DictWriter更改为csv.writer,这样我们可以更好地控制列。在

相关问题 更多 >