Список фильтров python на основе ключевых значений
У меня есть список словарей, и у каждого словаря есть ключ (пусть говорят) 'type', который может иметь значения 'type1'
, 'type2'
и т.д. Моя цель - отфильтровать эти словари в списке одинаковых словарей но только те из определенного "типа". Я думаю, что я просто борется с пониманием list/dictionary
.
поэтому список примеров будет выглядеть так:
exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]
У меня есть список ключевых значений. скажем, например:
keyValList = ['type2','type3']
где ожидаемый итоговый список будет выглядеть так:
expectedResult = [{'type':'type2'},{'type':'type2'},{'type':'type3'}]
Я знаю, что могу сделать это с набором для циклов. Я знаю, что должен быть более простой способ. я нашел много разных вкусов этого вопроса, но ни один из них не соответствовал действительности и ответил на вопрос. Я бы поставил попытку ответа... но они были не такими впечатляющими. вероятно, лучше оставить его открытым. Будем очень благодарны любой помощи.
Ответы
Ответ 1
Вы можете попробовать список comp
>>> exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]
>>> keyValList = ['type2','type3']
>>> expectedResult = [d for d in exampleSet if d['type'] in keyValList]
>>> expectedResult
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]
Другой способ - использовать filter
>>> list(filter(lambda d: d['type'] in keyValList, exampleSet))
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]
Ответ 2
Используйте filter
, или если количество словарей в exampleSet
слишком высоко, используйте ifilter
из itertools
модуля. Он вернет итератор, вместо того, чтобы сразу заполнить вашу системную память всем списком:
from itertools import ifilter
for elem in ifilter(lambda x: x['type'] in keyValList, exampleSet):
print elem