python - 从多个字典写入单个 CSV 文件

标签 python csv dictionary

背景

我有多个不同长度的词典。我需要将字典的值写入单个 CSV 文件。我想我可以逐个循环遍历每个字典并将数据写入 CSV。我遇到了一个小格式问题。

问题/解决方案

我意识到在循环第一个字典后,第二个写入的数据被写入第一个字典结束的行,如第一张图像中显示的那样,我理想地希望我的数据打印如下在第二张图片

enter image description here enter image description here

我的代码

import csv

    e = {'Jay':10,'Ray':40}
    c = {'Google':5000}

    def writeData():
        with open('employee_file20.csv', mode='w') as csv_file:
            fieldnames = ['emp_name','age','company_name','size']
            writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
            writer.writeheader()

            for name in e:
                 writer.writerow({'emp_name':name,'age':e.get(name)})

            for company in c:
                writer.writerow({'company_name':company,'size':c.get(company)})


    writeData()

PS:我有两个以上的字典,所以我正在寻找一种通用的方法,可以从所有字典的标题下的行打印数据。我愿意接受所有解决方案和建议。

最佳答案

如果所有字典大小相同,您可以使用 zip并行迭代它们。如果它们的大小不相等,并且您希望迭代填充到最长的字典,则可以使用 itertools.zip_longest

例如:

import csv
from itertools import zip_longest

e = {'Jay':10,'Ray':40}
c = {'Google':5000}

def writeData():
    with open('employee_file20.csv', mode='w') as csv_file:
        fieldnames = ['emp_name','age','company_name','size']
        writer = csv.writer(csv_file)
        writer.writerow(fieldnames)

        for employee, company in zip_longest(e.items(), c.items()):
            row = list(employee)
            row += list(company) if company is not None else ['', '']  # Write empty fields if no company

            writer.writerow(row)

writeData()

如果字典大小相等,则更简单:

import csv

e = {'Jay':10,'Ray':40}
c = {'Google':5000, 'Yahoo': 3000}

def writeData():
    with open('employee_file20.csv', mode='w') as csv_file:
        fieldnames = ['emp_name', 'age', 'company_name', 'size']
        writer = csv.writer(csv_file)
        writer.writerow(fieldnames)

        for employee, company in zip(e.items(), c.items()):
            writer.writerow(employee + company)

writeData()

一个小旁注:如果您使用Python3,字典是有序的。 Python2 中并非如此。所以如果你使用Python2,你应该使用collections.OrderedDict而不是标准字典。

关于python - 从多个字典写入单个 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52922226/

相关文章:

python - 为什么 csv.DictReader 会跳过空行?

所有词典中的 Python 打印键

python - 按原样在 Pandas Dataframe 中插入字典(JSON)

c++ - 如何在 C++ 中的映射中存储地址?

javascript - 如何在 python jupyter notebook 中绘图?

Python神经网络: running 10 iterations

python - 无法打开在Python代码中创建的Excel文件

python - 如何从 csv 读取第一列并分成多维数组

python - 将所需数据从一个文件复制到python中的另一个文件

Python 3.5 'list' 对象没有属性 'min' 和不可排序类型 : str() < int() and