如何使用列表推导从函数中的函数中提取键值?

时间:2019-05-29 12:21:41

标签: python dictionary python-requests list-comprehension nested-lists

我有电影上的数据,其中一部电影《伴娘》看起来像这样。

{'Similar': {'Info': [{'Name': 'Bridesmaids', 'Type': 'movie'}], 'Results': [{'Name': 'Baby Mama', 'Type': 'movie'}, {'Name': 'The Five-Year Engagement', 'Type': 'movie'}, {'Name': 'Bachelorette', 'Type': 'movie'}, {'Name': 'The Heat', 'Type': 'movie'}, {'Name': 'Date Night', 'Type': 'movie'}]}}

我想创建一个仅包含电影名称的列表[](因此,我想进入'Similar',然后在字典中找到'Info',找到{{ 1}}键,提取此值'Name')并遍历所有电影。

首先,我创建了函数get_movies_from_tastedive(name),以便将数据保存在电影中(第1部分)。

然后,我尝试定义第二个函数extract_movie_titles,希望该函数将返回电影标题列表。我在这里使用列表理解。 当我尝试通过打印(第22行和第23行)来调用它时,它不起作用。

第1部分。

e.g.'Bridesmaids'

第2部分。

def get_movies_from_tastedive(name):
    baseurl = 'https://tastedive.com/api/similar'
    pdict = {'q': name,'type': 'movies','limit': '5'}
    movie_resp = requests.get(baseurl, params = pdict)
    return movie_resp.json()
  

SyntaxError:第22行输入错误

2 个答案:

答案 0 :(得分:0)

压缩后的代码加上简短的测试代码。

import requests


def get_movies_from_tastedive(name):
    r = requests.get('https://tastedive.com/api/similar', params={'q': name, 'type': 'movies', 'limit': '5'})
    if r.status_code == 200:
        return [m['Name'] for m in r.json()['Similar']['Results'] if m['Type'] == 'movie']


movies = get_movies_from_tastedive('Tony Bennett')
if movies:
    print(movies)
else:
    print('ERR.Cant read movies')

输出

['The Startup Kids', 'The Englishman Who Went Up A Hill But Came Down A Mountain', 'A Place In The Sun', 'Last Tango In Paris', 'Charlie Chaplin']

答案 1 :(得分:0)

尝试一下

import requests_with_caching
import json 

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