La réponse offerte par @faham est une belle ligne unique, mais elle ne renvoie pas l'index du dictionnaire contenant la valeur. Au lieu de cela, il renvoie le dictionnaire lui-même. Voici un moyen simple d'obtenir: Une liste d'index un ou plusieurs s'il y en a plus d'un, ou une liste vide s'il n'y en a pas:
list = [{'id':'1234','name':'Jason'},
{'id':'2345','name':'Tom'},
{'id':'3456','name':'Art'}]
[i for i, d in enumerate(list) if 'Tom' in d.values()]
Production:
>>> [1]
Ce que j'aime dans cette approche, c'est qu'avec une simple modification, vous pouvez obtenir une liste des index et des dictionnaires sous forme de tuples. C'est le problème que j'avais besoin de résoudre et j'ai trouvé ces réponses. Dans ce qui suit, j'ai ajouté une valeur en double dans un dictionnaire différent pour montrer comment cela fonctionne:
list = [{'id':'1234','name':'Jason'},
{'id':'2345','name':'Tom'},
{'id':'3456','name':'Art'},
{'id':'4567','name':'Tom'}]
[(i, d) for i, d in enumerate(list) if 'Tom' in d.values()]
Production:
>>> [(1, {'id': '2345', 'name': 'Tom'}), (3, {'id': '4567', 'name': 'Tom'})]
Cette solution trouve tous les dictionnaires contenant «Tom» dans l'une de leurs valeurs.