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

背景

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

问题方案

我意识到在循环浏览第一个字典后,第二次写作的数据写入了第一个字典在第一个图像中显示的结束行,我理想地希望我的数据按照第二个图像中的显示进行打印

在此处输入图片说明 在此处输入图片说明

我的密码

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:我将有两个以上的词典,所以我正在寻找一种通用的方式,可以在所有词典的标题下从行打印数据。我愿意接受所有解决方案和建议。

ksbg

如果所有字典的大小相同,则可以使用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而不是标准字典。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章