Список фильтров 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