На что указывает индекс[0] в коде?
geo_logs = [
{'visit1': ['Москва', 'Россия']},
{'visit2': ['Дели', 'Индия']},
{'visit3': ['Владимир', 'Россия']},
{'visit4': ['Лиссабон', 'Португалия']},
{'visit5': ['Париж', 'Франция']},
{'visit6': ['Лиссабон', 'Португалия']},
{'visit7': ['Тула', 'Россия']},
{'visit8': ['Тула', 'Россия']},
{'visit9': ['Курск', 'Россия']},
{'visit10': ['Архангельск', 'Россия']}
]
visits_russia = []
for visits in geo_logs:
if 'Россия' in list(visits.values())[0]:
visits_russia.append(visits)
print(visits_russia, '\n')
Код перебирает словарь и возвращает visit если в значении есть 'Россия'.
Но я не понимаю что делает этот [0]. Если этого 0 нет, то не работает ничего, почему нельзя просто проверить на наличие в значении 'Россия' без указания индекса?
Спасибо за помощь!
Ответы (3 шт):
Метод values() возвращает список из значений словаря. У вас это будет список из списков, т.к. по каждому ключу словаря в значении будет список
Я бы рекомендовал отдельным циклом пройтись по спискам из values
Пример:
geo_logs = [
{'visit1': ['Москва', 'Россия']},
{'visit2': ['Дели', 'Индия']},
{'visit3': ['Владимир', 'Россия']},
{'visit4': ['Лиссабон', 'Португалия']},
{'visit5': ['Париж', 'Франция']},
{'visit6': ['Лиссабон', 'Португалия']},
{'visit7': ['Тула', 'Россия']},
{'visit8': ['Тула', 'Россия']},
{'visit9': ['Курск', 'Россия']},
{'visit10': ['Архангельск', 'Россия']}
]
visits_russia = []
for visits in geo_logs:
for countries in visits.values():
if 'Россия' in countries:
visits_russia.append(visits)
print(visits_russia, '\n')
geo_logs - список словарей.
visits - это конкретный словарь (пример - {'visit1': ['Москва', 'Россия']}).
visits.values() - это список значений из словаря. Для словаря {'visit1': ['Москва', 'Россия']} это будет [['Москва', 'Россия']]. То есть у вас значение в словаре уже список, и values вернет список списков. В общем случае там может быть много элементов, но у вас в словаре только один, потому и тут будет только один элемент - список ['Москва', 'Россия'].
visits.values()[0] - вернет этот элемент, т.е. ['Москва', 'Россия'].
'Россия' in list(visits.values())[0] - проверяет, входит ли Россия в этот список.
Без [0] проверка не работает, так как вы проверяете входит ли 'Россия' в список [['Москва', 'Россия']], что очевидно не так, так как так единственный элемент это список ['Москва', 'Россия'], а он не равен строке 'Россия'.
a = {'visit1': ['Москва', 'Россия']}
print(list(a.values())[0])
print(list(a.values()))
print(a.values())
Попробуйте ввести данный код и поймете, как это работает) Выведет:
['Москва', 'Россия']
[['Москва', 'Россия']]
dict_values([['Москва', 'Россия']])
Я думаю понятно почему работает 1 вариант... Индекс 0 просто убирает массив в массиве оставляя один массив. Когда Вы вызываете функцию values, создается массив в который добавляется ещë один массив. И если Вы проверяете наличие России в массиве в котором другой массив, то не находите значение Россия. Надеюсь объяснил понятно)