如何以正确的列对齐方式将字典转储到.xlsx文件中?

FaC*_*fee 4 python excel dictionary xlsxwriter

我有一本包含2000个项目的字典,如下所示:

d = {'10071353': (0, 0), '06030011': (6, 0), '06030016': (2, 10), ...}
Run Code Online (Sandbox Code Playgroud)

鉴于我想将其写入.xlsx文件,因此使用以下代码(从此处获取):

import xlsxwriter
workbook = xlsxwriter.Workbook('myfile.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0
order=sorted(d.keys())
for key in order:
    row += 1
    worksheet.write(row, col,     key)
    for item in d[key]:
        worksheet.write(row, col + 1, item)
        row += 1

workbook.close()
Run Code Online (Sandbox Code Playgroud)

这将产生.xlsx具有以下对齐方式的文件:

d = {'10071353': (0, 0), '06030011': (6, 0), '06030016': (2, 10), ...}
Run Code Online (Sandbox Code Playgroud)

但是,这是我追求的目标:

import xlsxwriter
workbook = xlsxwriter.Workbook('myfile.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0
order=sorted(d.keys())
for key in order:
    row += 1
    worksheet.write(row, col,     key)
    for item in d[key]:
        worksheet.write(row, col + 1, item)
        row += 1

workbook.close()
Run Code Online (Sandbox Code Playgroud)

为了实现此目的,我应该在脚本中进行哪些更改?

kor*_*nos 6

最好的方法是pandas用于此任务。此处提供了一些文档(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html

import pandas as pd


a = {'1':[1,2,3,4], '2':[5,6,7,8]}
a = pd.DataFrame(a)


writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
a.to_excel(writer, sheet_name='Sheet1')
writer.save()
Run Code Online (Sandbox Code Playgroud)

您可能需要安装xlsxwriter软件包


Ser*_*Dev 5

我认为这应该有所帮助:

import xlsxwriter
workbook = xlsxwriter.Workbook('myfile.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0

order=sorted(d.keys())
for key in order:
    row += 1
    worksheet.write(row, col,     key)
    i =1
    for item in d[key]:
        worksheet.write(row, col + i, item)
        i += 1

workbook.close()

IN:

d={'10071353':(0, 0),'06030011':(6, 0),'06030016':(2, 10)

OUT:
A           B    C
06030001    6    0

06030002    2    10

06030003    0    0
Run Code Online (Sandbox Code Playgroud)