我想在嵌套循环中动态创建多个文件名,对于2个参与者来说,每个参与者有不同的4个会话。我的目标是创建文件名,如:
我的代码是:
filename = {}
for y in range(0,4):
for i in range(0,2):
filename[y][i] = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)
但是,我收到KeyError:0。我被阻止了,无法找到解决方案。任何帮助将不胜感激。
非常感谢,
答案 0 :(得分:3)
该问题与您的字符串格式没有任何关系。当您尝试在词典中设置项目时,错误即将发生。这是因为您尝试在嵌套字典中设置项目,而没有创建内部字典:filename[y]
不存在,因此您无法filename[y][i]
。
你可以通过在外部循环中创建一个dict来解决这个问题:
filename = {}
for y in range(0,4):
filename[y] = {}
for i in range(0,2):
filename[y][i] = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)
虽然我会质疑dicts是否是正确的数据结构:看起来嵌套列表更合适:
filename = []
for y in range(0,4):
inner = []
for i in range(0,2):
inner.append('Learning_S%s_P%s.xlsx' % (1+y,1+i))
filename.append(inner)
答案 1 :(得分:0)
与字符串无关。 你得到KeyError是因为你写了
filename[y][i]
写
filename[y] = {}
filename[y][i] = 'whatever'
(你可以使用format()代替%s语法。)
建议:遇到这类问题时,请尝试将这几行中的行分开。
这条线本身很好:
filename[y][i] = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)
但是当它引发异常时,将其分成两部分:
value = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)
filename[y][i] = value
很明显,错误是由第二行引发的,与字符串无关。