使用动态变量迭代多个字典:

Iterating over multiple dictionaries with dynamic variables:

我有多个词典,而且词典的数量不固定,例如

year0 = {'A':'alpha','B':'beta','C':'gamma'}
year1 = {'D':'delta','E':'epsilon','F':'zeta'}
...
yearN = {dictionary N}

我的 objective 是循环遍历字典并将它们写入同一 Excel 文档中的新工作表,使用 openpyxl。我的代码如下:

31. for name in all_variables:
32. if name.startswith('year'):
33.    workbook = Workbook()
34.    sheet = workbook.active
35.    year_num = 0
36.    row = 1
37.    sheet.title = "Year"+str(year_num)
38.    for key in name.keys():
39.        sheet.cell(row, 1, key)
40.        sheet.cell(row, 2, name[key])
41.        row += 1
42.    year_num += 1
43.    sheet = workbook.create_sheet()

但是,代码抛出以下错误:

line 38, in <module> for key in name.keys(): AttributeError: 'str' object has no attribute 'keys'

即使我在第 38 行对字典名称进行硬编码,如下所示:

31. for name in all_variables:
32. if name.startswith('year'):
33.    workbook = Workbook()
34.    sheet = workbook.active
35.    year_num = 0
36.    row = 1
37.    sheet.title = "Year"+str(year_num)
38.    for key in year0.keys():
39.        sheet.cell(row, 1, key)
40.        sheet.cell(row, 2, name[key])
41.        row += 1
42.    year_num += 1
43.    sheet = workbook.create_sheet()

第 40 行然后抛出以下错误:

line 40 in <module> sheet.cell(row, 2, name[key]) TypeError: string indices must be integers

关于如何正确执行此迭代的任何帮助?谢谢!

在上面的代码中,您的 name 是一个字符串,还不是具有该名称的变量。具体来说,如果迭代到year0,它会变成'year0',而不是{'A':'alpha','B':'beta','C':'gamma'}。在您的情况下,您可以在 if 语句之后添加此行:

name = eval(name).

现在你的 name 变成了字典。