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 шт):

Автор решения: Ret7020

У вас в последней строке функции вы обращаетесь к списку 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"]

Вроде все ошибки исправил, если ещё что-то то пишите, будем разбираться.

→ Ссылка
Автор решения: Stanislav
for i in range robots

не будет работать по синтаксису. Надо или

for i in range(len(robots))

или

for d in robots
→ Ссылка
Автор решения: Stanislav

Дальше у вас:

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]

Теперь вопрос. Вы пишите, что нужно пройтись по списку. Но функция не проходится по списку, а возвращает ответ только для первого элемента. Уточните, в каком виде необходим ответ?

→ Ссылка