Как отфильтровать список словарей по ключевому слову?

Есть список:

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

Нужен код который вернет отфильтрованный список по слову Россия


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

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

Если в каждом словаре только один элемент, как в представленном образце, то так:

result = [d for d in geo_logs if 'Россия' in list(d.values())[0]]
print(result)

Вывод:

[
{'visit1': ['Москва', 'Россия']}, 
{'visit3': ['Владимир', 'Россия']},
{'visit7': ['Тула', 'Россия']},
{'visit8': ['Тула', 'Россия']},
{'visit9': ['Курск', 'Россия']},
{'visit10': ['Архангельск', 'Россия']}
]

Ну или можно ещё так, раз уж фильтрация, то через filter, хотя это тоже самое по сути:

result = list(filter(lambda x: 'Россия' in list(x.values())[0], geo_logs))
→ Ссылка
Автор решения: besunmyi

Если честно, у вас довольно странная структура. Советую подумать, действительно рационально добавлять в список много словарей, в каждом из которых по одному ключу, которые еще и отличаются друг от друга.

Но из того что есть можно сделать нечто подобное:

rus_geo_logs=[]
for i in range(1,11,1):
  if(geo_logs[i-1]['visit'+i][1]=='Россия'):
     rus_geo_logs.append(geo_logs[i-1]['visit'+i])
→ Ссылка