Python ошибка list indices must be integers or slices, not dict
Необходимо пройтись по списку robots и сравнить словари со значением с new_version, если версия ниже чем new_version - вернуть в виде:
Ошибка:
list indices must be integers or slices, not dict
Код проверки:
robots = [
{ "core_version": 9 },
{ "core_version": 13 },
{ "core_version": 16 },
{ "core_version": 9 },
{ "core_version": 14 },
]
get_outdated(robots, 10) == [0, 3]
Мой код:
def get_outdated(robots: list, new_version: int) -> list:
for i in range robots:
if robots[i] < new_version:
return robots["core_version"]
Ответы (3 шт):
У вас в последней строке функции вы обращаетесь к списку robots. В списке индексы - это числа(ну либо срез). В словарях вы в качестве некого индекса используются ключи, которые могут быть строками. У вас robots - это список словарей. Т.е. для начала вы должны достать словарь из списка, а затем взять нужное значение по ключу. Так же есть аналогичная ошибка в ифе и неправильно задан range в форе.
def get_outdated(robots: list, new_version: int) -> list:
for i in range(len(robots)):
if robots[i]["core_version"] < new_version:
return robots[i]["core_version"]
Вроде все ошибки исправил, если ещё что-то то пишите, будем разбираться.
for i in range robots
не будет работать по синтаксису. Надо или
for i in range(len(robots))
или
for d in robots
Дальше у вас:
if robots[i] < new_version:
Получается, вы сравниваете целое (int) со словарём. А надо - со значением в словаре.
if robots[i]["core_version"] < new_version:
Ну и возвращаете вы не корректно. Правильно:
return robots[i]["core_version"]
Итого:
robots = [
{"core_version": 9},
{"core_version": 13},
{"core_version": 16},
{"core_version": 9},
{"core_version": 14},
]
def get_outdated(robots: list, new_version: int) -> list:
for i in range(len(robots)):
if robots[i]["core_version"] < new_version:
return robots[i]["core_version"]
get_outdated(robots, 10) == [0, 3]
Теперь вопрос. Вы пишите, что нужно пройтись по списку. Но функция не проходится по списку, а возвращает ответ только для первого элемента. Уточните, в каком виде необходим ответ?