簡體   English   中英

使用生成器/列表推導獲得此輸出?

[英]Getting this output, with generators/list comprehensions?

我遇到了一些問題,我不知道怎么做。

好吧,我正在創建一個帶有按鈕的動態表單,這些按鈕可以適應目錄中有多少文件(在本例中為電影)。

到目前為止我有這個:

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))]) 

但是,我希望list comprehension / generator使my_form看起來像這樣:

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,它是btnAbtnB

那我怎么能產生那個輸出呢?

我想你想做的事情如下:

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_uppercase的字母標記movies每個項目。

如果我理解正確,你想根據電影的索引將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))])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM