【问题标题】:How to export multiple dictionaries with some different keys into one csv file in Python?如何在 Python 中将具有不同键的多个字典导出到一个 csv 文件中?
【发布时间】:2019-10-31 08:56:35
【问题描述】:

我正在尝试将具有不同字段名的多个字典写入一个 csv 文件。我想将所有字典的键放在 csv 文件的顶部作为标题,并将它们的所有值放在每一行中。但是我的代码没有这样做,它将每个字典的键添加到单独的行中,并将其值添加到下面的行中。

from bs4 import BeautifulSoup
import os
import re
import csv

for j in range(1,39):
    for i in rabge(1,10):


### calculate super_dict for each html pages
            super_dict.update(social_urls)
            super_dict.update(metadata)
            super_dict.update(project_name)
            super_dict.update(bc_dict)
            super_dict.update(ind_dict)
            super_dict.update(pos_dict)
            super_dict.update(likes_dict)
            super_dict.update(memprof_dict)
            super_dict.update(video_link)
            super_dict.update(details_dict) 
            with open('output.csv', 'a') as csvfile:`
                fieldnames = super_dict.keys()
                writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
                writer.writeheader()
                writer.writerow(super_dict)

【问题讨论】:

    标签: python python-3.x csv dictionary export-to-csv


    【解决方案1】:

    问题在于代码编写了一个字典,DictWriter 将其视为单行。一种可行的方法是从所有dict 的键创建字段名,然后将每个dict 写为单独的行。

    类似这样的:

    dicts = [social_urls, metadata, ...]
    fieldnames = set()
    # Update fieldnames with each dict's keys
    # Use a set to filter duplicates.
    fieldnames.update(*(d.keys() for d in dicts))
    with open(myfile.csv, 'a', newline='') as f:
        writer= csv.DictWriter(f, fieldnames=fieldnames)
        for d in dicts:
            writer.writerow(d)
    

    【讨论】:

    • 谢谢,但我不想将诸如 social_urls、metadata 之类的字典写成单独的行。我想要做的是将这些字典组合到 super_dict 中,然后将 super_dict 写在单独的行中。实际上,在上面代码中的每次迭代(内部 for 循环)中,super_dict 都会发生变化,它是一个具有不同键的新 dict,因此我想将其所有键添加到 csv 文件的标题中,并将其值写入单独的行中每次迭代。 @snakecharmerb
    • 谢谢。我将您的代码用于 super_dict 并将 super_dict 附加到每次迭代中称为 dicts = [] 的字典列表中,然后将其写入 csv 文件并且它起作用了。
    猜你喜欢
    • 2021-06-15
    • 2019-09-18
    • 2018-11-06
    • 2019-07-14
    • 2015-02-16
    • 1970-01-01
    • 2015-07-25
    • 2019-11-10
    • 2022-11-11
    相关资源
    最近更新 更多