如何从 movie.get('casts') 函数获取名称

How to get name from movie.get('casts') function

您好,我正在尝试使用 IMDbPY 库创建一个数据库。但是当我尝试使用 get('cast') 获取名称时。 我该如何解决?代码如下:

from imdb import IMDb
ia = IMDb()
def getmovieID( movie_name ):
    movie = ia.search_movie(movie_name)[0] # a Movie instance.
    get_movie = ia.get_movie(movie.movieID)
    return get_movie

def getcast(movie_name):
    movie = getmovieID(movie_name)
    casts = []
    cast = movie.get('casts')
    for a in cast['name']:
        casts.append(a)
    return casts

print(getcast('The Dark Knight'))

它说: getcast 中的文件 "C:.../Python/imdbtest.py",第 17 行 对于演员['name']:

类型错误:字符串索引必须是整数

您必须考虑 movie.get('casts') 将 return Person 对象列表,而不是带有 'name' 键的字典。

我注意到的另一件(次要)事情是您获得了第一个结果的 movieID,然后再次获取电影。这可以使用 ia.update 方法省略。

一个有效的例子(仍然假设了很多事情,比如搜索至少会给你一个结果):

#!/usr/bin/env python3

import sys

from imdb import IMDb
ia = IMDb()

def getmovieID(movie_name):
    movie = ia.search_movie(movie_name)[0] # a Movie instance.
    ia.update(movie)
    return movie

def getcast(movie_name):
    movie = getmovieID(movie_name)
    casts = []
    for person in movie.get('cast', []):
        casts.append(person['name'])
    return casts

print(getcast('The Dark Knight'))

重构您的代码。

from imdb import IMDb
ia = IMDb()


def getmovieID(movie_name):
    movie = ia.search_movie(movie_name)[0]
    get_movie = ia.get_movie(movie.movieID)
    return get_movie


def getcast(movie_name):
    movie = getmovieID(movie_name)
    casts_objects = movie.get('cast')
    casts = []
    for person in casts_objects:
        casts.append(person.get('name'))
    return casts

print(getcast('The Dark Knight'))