web-dev-qa-db-fra.com

Comment trouver une valeur dans une liste de dictionnaires python?

Ayez une liste de dictionnaires python dans le format suivant. Comment feriez-vous une recherche pour trouver un nom spécifique?

label = [{'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347),
          'name': 'Test',
          'pos': 6},
             {'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347),
              'name': 'Name 2',
          'pos': 1}]

Les éléments suivants n'ont pas fonctionné:

if 'Test'  in label[name]

'Test' in label.values()
35
bobsr

Vous devez rechercher dans tous les dictionnaires de votre liste; utilisez any() avec une expression de générateur:

any(d['name'] == 'Test' for d in label)

Cela court-circuitera; renvoie True lorsque la première correspondance est trouvée, ou renvoie False si aucun des dictionnaires ne correspond.

57
Martijn Pieters

Vous pourriez également être après:

>>> match = next((l for l in label if l['name'] == 'Test'), None)
>>> print match
{'date': datetime.datetime(2013, 6, 17, 8, 56, 24, 2347),
 'name': 'Test',
 'pos': 6}

Ou peut-être plus clairement:

match = None
for l in label:
    if l['name'] == 'Test':
        match = l
        break
36
Eric