背景
我有多个不同长度的字典。我需要将字典的值写入单个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:我将有两个以上的词典,所以我正在寻找一种通用的方式,可以在所有词典的标题下从行打印数据。我愿意接受所有解决方案和建议。
如果所有字典的大小相同,则可以使用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] 删除。
我来说两句