进行遍历时,我有我通过以试图循环写入Excel文件嵌套的字典。的Python:冗余通过嵌套字典
这是发起并创建嵌套的字典
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
包含字符串列表)。这意味着,如果我只有一个要写入的值,它会被写入字符串中有字符的次数。
例如: - 价值:苹果将在一个新的Excel行被写入5倍
什么我错在这里做什么?
编辑:冗余问题已经解决,但现在我需要了解在将我的最后一项,即我的字符串列表分配给子项键时,如果我做错了什么。
这完美地工作,非常感谢!关于subitemval是列表还是str的问题,答案是subitemval应该是str的列表。所以我想要实现的是写出所有子项目,即各个子项目的最终项目。你知道我可以怎么做吗? – Sajruss
上面的代码应该做到这一点!类型检查应确保“subitemval”总是一个列表,所以“对于subitemval中的finalitem”将正确地迭代它。 – mfitzp
不幸的是,目前情况并非如此,它只打印出第一个子项目。我怀疑我在构建词典和分配子项时犯了错误。你介意看那部分吗? – Sajruss