我需要为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
答案 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)