J'ai une liste de dictionnaires et chaque dictionnaire a une clé (disons) 'type' qui peut avoir les valeurs de 'type1'
, 'type2'
, Etc. Mon but est de filtrer ces dictionnaires en une liste des mêmes dictionnaires mais seulement ceux d'un certain "type". Je pense que je me bats vraiment avec les compréhensions list/dictionary
.
donc une liste d'exemple ressemblerait à ceci:
exampleSet = [{'type':'type1'},{'type':'type2'},{'type':'type2'}, {'type':'type3'}]
j'ai une liste de valeurs clés. disons par exemple:
keyValList = ['type2','type3']
où la liste obtenue devrait ressembler à:
expectedResult = [{'type':'type2'},{'type':'type2'},{'type':'type3'}]
Je sais que je pourrais le faire avec un ensemble de boucles for. Je sais qu'il doit y avoir un moyen plus simple cependant. J'ai trouvé beaucoup de saveurs différentes de cette question mais aucune ne correspond vraiment à l'addition et a répondu à la question. Je voudrais poster une tentative de réponse ... mais ils n'étaient pas si impressionnant. probablement préférable de le laisser ouvert. Toute assistance sera grandement appréciée.
Vous pouvez essayer une liste 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'}]
Une autre méthode consiste à utiliser filter
>>> list(filter(lambda d: d['type'] in keyValList, exampleSet))
[{'type': 'type2'}, {'type': 'type2'}, {'type': 'type3'}]
Utilisez filter
ou, si le nombre de dictionnaires dans exampleSet
est trop élevé, utilisez ifilter
du module itertools
. Il renverrait un itérateur, au lieu de remplir la mémoire de votre système avec la liste complète à la fois:
from itertools import ifilter
for elem in ifilter(lambda x: x['type'] in keyValList, exampleSet):
print elem