Ошибка KeyError
import requests
import json
from datetime import date
URL = r'http://api.nobelprize.org/v1/prize.json'
print(requests.get(URL).json()['prizes'][0]['year'])
print(requests.get(URL).json()['prizes'][0]['category'])
print(requests.get(URL).json()['prizes'][0]['laureates'])
print(requests.get(URL).json()['prizes'][0]['laureates'][1]['surname'])
print(requests.get(URL).json()['prizes'][0].keys())
print([i['year'] for i in requests.get(URL).json()['prizes']])
print([i['laureates'] for i in requests.get(URL).json()['prizes']])
Почему в последней строчке возникает ошибка KeyError: 'laureates'?

Вообще задание такое. Нужно написать программу
def parse_nobel_json(year):
""" Используя json базу данных лауреатов Нобелевской премии вернуть
`[winner1, ...]` - список фамилий лауреатов Нобелевской премии по физике в году `year`
Если в json нет данных за запрашиваемый год, то вернуть `None`
Аргументы:
- year:int - год вручения Нобелевской премии
Возвращает:
- list: список нобелевских лауреатов
Пример:
>>> parse_nobel_json(2018)
['Ashkin', 'Mourou', 'Strickland']
Указания:
- json база лежит по адресу http://api.nobelprize.org/v1/prize.json
- получить ответ на запрос можно с помощью requests.get
- обработать ответ можно с помощью json
- авторское решение занимает 5 строк
"""
Ответы (2 шт):
Автор решения: Sergey Derevianko
→ Ссылка
Видимо есть такой ключ существует не во всех элементах списка, используй метод get:
[i.get('year', 'Year not found!') for i in requests.get(URL).json()['prizes']]
Автор решения: GhosttCasper
→ Ссылка
Спасибо всем за помощь! Задачу решил.
def parse_nobel_json(year):
import requests
import json
laureates = []
URL = r'http://api.nobelprize.org/v1/prize.json'
jsonObj = requests.get(URL).json()
for prize in jsonObj['prizes']:
if prize['year'] == str(year) and prize.get('laureates') != None and prize['category'] =="physics":
for laureate in prize['laureates']:
if (laureate.get('surname') != None):
laureates.append(laureate['surname'])
else:
laureates.append(laureate['firstname'])
return laureates if len(laureates) != 0 else None
pass