Ошибка 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
→ Ссылка