【发布时间】:2016-01-14 09:36:04
【问题描述】:
我有一个嵌套字典,我正在尝试循环访问它以写入 excel 文件。
这是启动和创建嵌套字典的代码
def tree(): return defaultdict(tree)
KMstruct = tree()
for system in sheet.columns[0]:
if system.value not in KMstruct:
KMstruct[system.value]
for row in range(1,sheet.get_highest_row()+1):
if sheet['A'+str(row)].value == system.value and sheet['B'+str(row)].value not in KMstruct:
KMstruct[system.value][sheet['B'+str(row)].value]
if sheet['B'+str(row)].value == sheet['B'+str(row)].value and sheet['C'+str(row)].value not in KMstruct:
KMstruct[system.value][sheet['B'+str(row)].value][sheet['C'+str(row)].value]
if sheet['C'+str(row)].value == sheet['C'+str(row)].value and sheet['D'+str(row)].value not in KMstruct:
KMstruct[system.value][sheet['B'+str(row)].value][sheet['C'+str(row)].value][sheet['D'+str(row)].value]
KMstruct[system.value][sheet['B'+str(row)].value][sheet['C'+str(row)].value][sheet['D'+str(row)].value] = [sheet['E'+str(row)].value]
这是我循环的代码:
for key in KMstruct.keys():
r += 1
worksheet.write(r, col, key)
for subkey in KMstruct[key]:
if currsubkeyval != subkey:
r += 1
worksheet.write(r, col, key)
r +=1
worksheet.write(r, col, key + '\\' + subkey)
for item in KMstruct[key][subkey]:
if curritemval != item:
r +=1
worksheet.write(r, col, key + '\\' + subkey)
for subitem in KMstruct[key][subkey][item]:
r += 1
worksheet.write(r, col, key + '\\' + subkey + '\\' + item)
worksheet.write(r, col + 1, subitem)
curritemval = item
for finalitem in KMstruct[key][subkey][item][subitem]:
r += 1
worksheet.write(r, col, key + '\\' + subkey + '\\' + item + '\\' + subitem)
worksheet.write(r, col + 1, KMstruct[key][subkey][item][subitem])
由于我是菜鸟,请耐心等待这段代码,我知道这不是那么漂亮。无论如何,我的问题是最后一个循环。我试图在KMstruct[key][subkey][item][subitem] 中获取字符串值,但循环变量lastitem 遍历键的字符串值的每个字符(注意:键subitem 包含字符串列表)。这意味着如果我只有一个要写入的值,它会被写入与字符串中的字符一样多的次数。
E.g.: value: apple 将在新的 excel 行上写入 5 次
我在这里做错了什么?
编辑:关于冗余的问题已经解决,但现在我需要了解在将我的最后一项(即我的字符串列表)分配给子项键时是否做错了。
【问题讨论】:
标签: python excel dictionary tree iteration