如何从函数内的函数中提取键值?

时间:2019-06-16 02:42:09

标签: python python-3.x

我拥有字典格式的电影数据,如下例所示:

 {'Similar': {'Info': [{'Name': 'Tony Bennett', 'Type': 'music'}], 'Results': [{'Name': 'The Startup Kids', 'Type': 'movie'}, {'Name': 'Charlie Chaplin', 'Type': 'movie'}, {'Name': 'Venus In Fur', 'Type': 'movie'}, {'Name': 'Loving', 'Type': 'movie'}, {'Name': 'The African Queen', 'Type': 'movie'}]}}

我需要从中提取电影名称,但是在旅途中我会遇到不同的错误。已经尝试了很多事情,但是还没有找到解决方案。

我创建了函数get_movies_from_tastedive(movies),以获取有关TasteDive中电影的数据(第1部分),然后定义了第二个函数(第2部分)extract_movie_titles以获取电影标题。

获取KeyError:KeyError:与第23行类似 -我在符石学习环境中运行它,它还显示:{'error':'响应不可解释为json。尝试打印.text属性'}。 -如果我尝试打印.text,它说AttributeError:'dict'对象在第21行没有属性'text'

第1部分

def get_movies_from_tastedive(movies):
    baseurl = "https://tastedive.com/api/similar"
    params_diction = {}
    params_diction["q"] = movies
    params_diction["type"] = "movies"
    params_diction["limit"] = 5 
    movie_resp = requests_with_caching.get(baseurl, params = params_diction)
    #print(movie_resp.json())
    return movie_resp.json()

第2部分

def extract_movie_titles(movies):
    t = get_movies_from_tastedive(movies) 
    #title = t.text
    #print(title)
    return [d['Name'] for d in t['Similar']['Info']]


extract_movie_titles(get_movies_from_tastedive("Tony Bennett"))
extract_movie_titles(get_movies_from_tastedive("Bridesmaids"))

预期结果应为:['The Startup Kids','Charlie Chaplin'],'Venus In Fur','Loving','The African Queen'],但出现KeyError:类似第23行

1 个答案:

答案 0 :(得分:1)

您要查找的信息在t ['Similar'] ['Results']

以下代码对我有用:

d =  {'Similar': {'Info': [{'Name': 'Tony Bennett', 'Type': 'music'}], 'Results': [{'Name': 'The Startup Kids', 'Type': 'movie'}, {'Name': 'Charlie Chaplin', 'Type': 'movie'}, {'Name': 'Venus In Fur', 'Type': 'movie'}, {'Name': 'Loving', 'Type': 'movie'}, {'Name': 'The African Queen', 'Type': 'movie'}]}}


def extract_movie_titles(d):
   return [m['Name'] for m in d['Similar']['Results']]

print (extract_movie_titles(d))

输出: enter image description here