遍历列表以创建ID为Python的新列表

时间:2020-07-21 09:44:45

标签: python list for-loop

因此,我尝试使用IMDBpy模块将程序列表连接到其各自的流派。首先,我尝试获取其IMDB ID的新列表,以从中获取其对应的流派。 不幸的是,我无法遍历程序列表并生成对应ID的新列表。不知何故,我的函数在第一次迭代时卡住了。我在定义中缺少什么?

from imdb import IMDB
ia = IMDb()
programs = ['midsomer murders', 'wheeler dealers: dream car', 'solo: a star wars story (2018)']
def ids_list(x):
    ids = []
    for item in list(x):
        movie = ia.search_movie(item)[0].getID()
        for movie in movies:
            ids.append(movie)
        return ids
    
ids_list(programs)

输出:

['0118401']

如您所见,只有第一个项目通过,而我的代码建议在通过ia.search_movie(item)[0].getID()运行它之后,应在列表中添加每个项目。预先感谢!

2 个答案:

答案 0 :(得分:1)

我的意思是将您的for-loop代码更改为此:

for item in list(x):
    if len(ia.search_movie(item)):
        movies = ia.search_movie(item)[0].getID()
        [ids.append(movie) for movie in movies]
return ids

答案 1 :(得分:1)

您的退货不正确缩进。它在for循环的第一次迭代之后返回:

from imdb import IMDb
ia = IMDb()
programs = ['midsomer murders', 'wheeler dealers: dream car', 'solo: a star wars story (2018)']
def ids_list(x):
    ids = []
    for item in list(x):
        movie = ia.search_movie(item)
        if movie:
          ids.append(movie[0].getID())
        else:
          ids.append(None)
    return ids
    
print(ids_list(programs))

使用列表理解和赋值运算符(Python 3.8+)的简化版本:

from imdb import IMDb
ia = IMDb()
programs = ['midsomer murders', 'wheeler dealers: dream car', 'solo: a star wars story (2018)']
def ids_list(x):
    return [m[0].getID() if (m:=ia.search_movie(i)) else None for i in x]
    
print(ids_list(programs))