La risposta offerta da @faham è una bella riga, ma non restituisce l'indice al dizionario che contiene il valore. Invece restituisce il dizionario stesso. Ecco un modo semplice per ottenere: Un elenco di indici uno o più se ce ne sono più di uno o un elenco vuoto se non ce ne sono:
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()]
Produzione:
>>> [1]
Quello che mi piace di questo approccio è che con una semplice modifica puoi ottenere un elenco di entrambi gli indici e i dizionari come tuple. Questo è il problema di cui avevo bisogno per risolvere e trovare queste risposte. Di seguito, ho aggiunto un valore duplicato in un dizionario diverso per mostrare come funziona:
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()]
Produzione:
>>> [(1, {'id': '2345', 'name': 'Tom'}), (3, {'id': '4567', 'name': 'Tom'})]
Questa soluzione trova tutti i dizionari contenenti "Tom" in uno dei loro valori.