在 Python 中使用多个 %s 格式化输出名称

Use multiple %s for formating output names in Python

我想在嵌套循环中动态创建多个文件名,比方说,对于 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。我被阻止了,找不到解决方案。任何帮助将不胜感激。

非常感谢,

此问题与您的字符串格式无关。当你试图在你的字典中设置项目时,错误就来了。那是因为你试图在嵌套字典中设置项目,而没有创建内部字典:filename[y] 不存在,所以你不能做 filename[y][i].

您可以通过在外循环中创建字典来解决此问题:

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)

虽然我会质疑字典是否是正确的数据结构:似乎嵌套列表更合适:

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)

与字符串无关。 你得到 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

很明显错误是由第二行引发的,与字符串无关。