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.

1
Sam 5 mars 2016 à 21:58

4 réponses

Meilleure réponse

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.

2
Mike Müller 5 mars 2016 à 19:12

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
0
Jenner Felton 5 mars 2016 à 19:05
[d for d in d_list if d.get('Type') == 'A']
0
Jared Goguen 5 mars 2016 à 19:04
>>> 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'}]
0
Tony Babarino 5 mars 2016 à 19:04