【问题标题】:XLSXwriter - writing multiple nested dictionariesXLSXwriter - 编写多个嵌套字典
【发布时间】:2019-08-14 23:08:09
【问题描述】:

我需要将多嵌套字典写入 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 的第一个键

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    如果您提供一个您尝试保存的字典示例,您的问题会更容易回答。

    您是否考虑过将字典序列化/反序列化为 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)
    

    【讨论】:

    • 在字典代码下添加了一个示例输出,我想这就是你要求的哈哈。我没有考虑过使用 JSON 格式,只是因为我几乎从不使用它!不过我会试一试。
    • 好吧,序列化为 JSON 非常简单。将 JSON 文件连接到我的 Excel 工作簿被证明是极其困难的......
    猜你喜欢
    • 2019-02-07
    • 2018-01-29
    • 2021-06-13
    • 2021-01-31
    • 1970-01-01
    • 2019-05-26
    • 2021-12-09
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多