XLSXwriter-编写多个嵌套字典

时间:2019-08-14 14:35:14

标签: python dictionary

我需要为Excel文件写一个多嵌套词典。字典的结构为dict1:{dict2:{dict3:value}}}。我的第三个写循环正在引发keyerror: '',即使不应有任何空白键。

我尝试使用这种可恶的怪物,因为它在较小的词典中表现出色,但是1)必须有更好的方法2)我无法为该词典缩放比例...

import xlsxwriter
workbook = xlsxwriter.Workbook('datatest.xlsx')
worksheet = workbook.add_worksheet('test1')                            
row = 0
col = 0
for key in sam_bps.keys():
    row += 1
    worksheet.write(row, col, key)
    for key in sam_bps[sam].keys():
        row, col = 0,1
        worksheet.write(row,col,key)
        row += 1
        for key in sam_bps[sam][bp].keys():
            row,col = 0,2
            worksheet.write(row,col,key)
            row += 1
            for key in sam_bps[sam][bp][mpn].keys():
                row,col = 0,3
                worksheet.write(row,col,key)
                row += 1
                for item in sam_bps[sam][bp][mpn].keys():
                    row,col = 0,4
                    worksheet.write(row,col,item)
                    row += 1
workbook.close()

我也考虑过将字典转换为元组列表或列表列表,但是它没有输出我需要的内容。无论如何,以后可能会花费更多时间将这些内容拆分开。

以下是字典的代码:

sam_bps = {}
sam_bps_header = ['SAM','BP','MPN','PLM_Rate']
for row in plmdata:
    sam,mpn,bp,doc = row[24],row[5],row[7],row[2]
    if sam == '':
        sam = 'Unknown'
    if doc == 'Requirement':
        if sam not in sam_bps:
            sam_bps[sam] = {bp:{mpn:heatscores[mpn]}}
        elif bp not in sam_bps[sam]:
            sam_bps[sam][bp] = {mpn:heatscores[mpn]}
        elif mpn not in sam_bps[sam][bp]:
            sam_bps[sam][bp][mpn] = heatscores[mpn]
print(sam_bps['Dan Reiser'])

编辑:添加了打印语句以显示每个反馈的输出

  

{'Fortress Solutions':{'MSM5118160F60JS':45},'Benchmark Electronics':{'LT1963AES8':15},'Axxcss Wireless Solutions Inc':{'MGA62563TR1G':405}}

我希望看到此输出到Excel文件,当然第一列是sam_bps

的第一键

1 个答案:

答案 0 :(得分:0)

如果您提供了要保存的词典的示例,则您的问题会更容易回答。

您是否考虑过仅将字典序列化/反序列化为JSON格式?

您可以使用最少的代码保存/重新加载文件:

import json
data = {'test': {'test2': {'test3':2}}}
with open('data.json', 'w') as outfile:
    json.dump(data, outfile)

with open('data.json') as data_file:
    data = json.load(data_file)