Как отфильтровать список словарей по ключевому слову?
Есть список:
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])