J'ai essayé de trouver la solution partout mais je n'ai pas trouvé le moyen de résoudre ce problème. Supposons que j'ai plusieurs dictionnaires dans une liste:
[
{"Type": "A", "Name": "Sam"},
{"Type": "A", "Name": "Apple"},
{"Type": "B", "Name": "Sam"},
{"Type": "C", "Name": "Apple"},
{"Type": "C"}
]
Ce dont j'ai besoin, ce sont les dictionnaires qui ont 'Type' == 'A'
.
Le résultat que j'essaye d'obtenir est:
[{"Type": "A", "Name": "Sam"}, {"Type": "A", "Name": "Apple"}]
Existe-t-il un moyen de parvenir à cela? Toute aide ou toute direction dans la résolution de ce problème serait formidable.
4 réponses
Parcourez votre liste et prenez tous les dictionnaires avec un Type
de A
:
>>> data = [{"Type": "A", "Name": "Sam"},{"Type":"A", "Name":"Apple"},{"Type": "B", "Name": "Sam"},{"Type":"C", "Name":"Apple"},{"Type":"C"}]
>>> [d for d in data if d.get('Type') == 'A']
[{'Name': 'Sam', 'Type': 'A'}, {'Name': 'Apple', 'Type': 'A'}]
L'utilisation de dict.get () garantit qu'il fonctionne pour les dict sans clé Type
:
data = [{"Type": "A", "Name": "Sam"},
{"Type":"A", "Name":"Apple"},
{"Type": "B", "Name": "Sam"},
{"Type":"C", "Name":"Apple"},
{"Type":"C"},
{}]
>>> [d for d in data if d.get('Type') == 'A']
[{'Name': 'Sam', 'Type': 'A'}, {'Name': 'Apple', 'Type': 'A'}]
Car:
get(key[, default])
Renvoie la valeur de key si key est dans le dictionnaire, sinon default. Si la valeur par défaut n'est pas indiquée, elle est définie par défaut sur None, de sorte que cette méthode ne déclenche jamais de KeyError.
Ce n'est certainement pas la façon la plus pythonique de le faire, mais si vous avez besoin d'une solution rapide et sale, je pense que cela fonctionne.
def filterDictionaries(dictionaries, type):
filteredDicts = []
for dict in dictionaries:
if 'Type' in dict:
if dict['Type] == type:
filteredDicts += dict
return filteredDicts
[d for d in d_list if d.get('Type') == 'A']
>>> a
[{'Type': 'A', 'Name': 'Sam'}, {'Type': 'A', 'Name': 'Apple'}, {'Type': 'B', 'Name': 'Sam'}, {'Type': 'C', 'Name': 'Apple'}, {'Type': 'C'}]
>>> b = [x for x in a if x['Type']=='A']
>>> b
[{'Type': 'A', 'Name': 'Sam'}, {'Type': 'A', 'Name': 'Apple'}]
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.