Как извлечь значения ключа из функции внутри функции, используя понимание списка? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть данные о фильмах, которые выглядят так для одного из фильмов, «Подружка невесты».

{'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', в словаре найти значение для ключа 'Name', извлечь это значение, e.g.'Bridesmaids') и итерация для всех фильмов.

Сначала я создал функцию get_movies_from_tastedive (name) для хранения данных о фильмах (часть 1).

Затем я пытаюсь определить вторую функцию extract_movie_titles, которая, мы надеемся, вернет список названий фильмов. Я использую понимание списка здесь. Когда я пытаюсь вызвать его, печатая (строка 22 и строка 23), он не работает ..

Часть 1.

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()

Часть 2.

def extract_movie_titles(name):
p = get_movies_from_tastedive(name)   
return[d['Name'] for d in p['Similar']['Info']]

print(extract_movie_titles(get_movies_from_tastedive("Tony Bennett"))) #line 22
print(extract_movie_titles(get_movies_from_tastedive("Bridesmaids"))) #line 23

SyntaxError: неверный ввод в строке 22 * ​​1021 *

1 Ответ

0 голосов
/ 29 мая 2019

Уплотненная версия кода и короткий код тестирования.

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']
...