TypeError: 'builtin_function_or_method' object is not subscriptable как исправить эту ошибку?

from pprint import pprint

geo_logs = [
{'visit1': ['Москва', 'Россия']},
{'visit2': ['Дели', 'Индия']},
{'visit3': ['Владимир', 'Россия']},
{'visit4': ['Лиссабон', 'Португалия']},
{'visit5': ['Париж', 'Франция']},
{'visit6': ['Лиссабон', 'Португалия']},
{'visit7': ['Тула', 'Россия']},
{'visit8': ['Тула', 'Россия']},
{'visit9': ['Курск', 'Россия']},
{'visit10': ['Архангельск', 'Россия']}
]


for geo_logs2 in geo_logs:
geo = list(geo_logs2.values[0])
if geo[1] == "Россия":
    geo_logs.setdefault("[]")
    geo_logs.append(geo_logs2)
pprint(geo_logs2)
geo = list(geo_logs2.values[0])
TypeError: 'builtin_function_or_method' object is not subscriptable

Ответы (1 шт):

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

Во-первых вам надо сдвинуть вправо на табуляцию весь код после строки с циклом for. Далее, про строку с ошибкой:

geo = list(geo_logs2.values[0])

dict.values - это функция, её надо вызывать со скобками, а индексировать вам надо список, в который вы преобразуете значения словаря, а не сами значения:

geo = list(geo_logs2.values())[0]

Но дальше у вас всё-равно вылезет ошибка в строке:

geo_logs.setdefault("[]")

И вообще непонятно, что вы дальше делаете - вы добавляете элементы в список, по которому итерируетесь, поэтому список будет расти бесконечно и программа зациклится, если вы просто закомментируете строку с setdefault. Вам надо разбираться, что вы вообще хотите сделать и менять алгоритм действий.

→ Ссылка