Python 使用生成器/列表理解获取此输出?

Python 使用生成器/列表理解获取此输出?,python,generator,list-comprehension,web.py,Python,Generator,List Comprehension,Web.py,我有点麻烦,我不知道怎么做 嗯,我正在创建一个动态表单,其中的按钮可以根据目录中的文件数量(在本例中为电影)进行调整 到目前为止,我已经做到了: path="C:\\Users\\User\\Desktop\\test\\" # insert the path to the directory of interest movies = [] dirList=os.listdir(path) for fname in dirList: # loops through directory spe

我有点麻烦,我不知道怎么做

嗯,我正在创建一个动态表单,其中的按钮可以根据目录中的文件数量(在本例中为电影)进行调整

到目前为止,我已经做到了:

path="C:\\Users\\User\\Desktop\\test\\"  # insert the path to the directory of interest
movies = []
dirList=os.listdir(path)

for fname in dirList: # loops through directory specified
    print fname # prints file name
    movies.append(fname) # adds the file name to list

my_form = form.Form([form.Button("btn", id="btn" + movies[i], value = i, html=movies[i], class_="btn" +movies[i]) for i in range(len(movies))]) 
但是,我希望列表理解/生成器使
我的表单
如下所示:

my_form = form.Form(
    form.Button("btn", id="btnA", value="A", html="Movie1", class_="btnA")
    form.Button("btn", id="btnB", value="B", html="Movie2", class_="btnB")
)
正如您所看到的,电影名称不是id,而是
btnA
btnB


那么,我如何才能生成该输出呢?

我认为您需要执行以下操作:

from string import ascii_uppercase

buttons = [form.Button("btn", id="btn{0}".format(char), value=char, 
                       html=movie, class_="btn{0}".format(char))
           for char, movie in zip(ascii_uppercase, movies)]

my_form = form.Form(buttons)

这使用
string.ascii_大写中的字母来标记
电影中的每个项目

如果我理解正确,您想根据电影索引将id设置为btn+字母吗

您可以使用以下代码:

def letterForIndex(idx):
    return chr(ord('A')+idx)
所以你会这样做:

 my_form = form.Form([form.Button("btn", id="btn" + letterForIndex(i),
 value = letterForIndex(i), html=movies[i], class_="btn" +letterForIndex(i)) for i in range(len(movies))])

请检查缩进。没问题。请注意,如果您有26部以上的电影,
zip
将悄悄地只提供前26部;您可能想考虑这种情况并适当更新。