因此,我尝试使用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()
运行它之后,应在列表中添加每个项目。预先感谢!
答案 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))