Die von @faham angebotene Antwort ist ein netter Einzeiler, gibt jedoch den Index nicht an das Wörterbuch zurück, das den Wert enthält. Stattdessen wird das Wörterbuch selbst zurückgegeben. Hier ist ein einfacher Weg, um zu erhalten: Eine Liste von Indizes, eine oder mehrere, wenn es mehr als eine gibt, oder eine leere Liste, wenn es keine gibt:
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()]
Ausgabe:
>>> [1]
Was mir an diesem Ansatz gefällt, ist, dass Sie mit einer einfachen Bearbeitung eine Liste sowohl der Indizes als auch der Wörterbücher als Tupel erhalten können. Dies ist das Problem, das ich lösen und diese Antworten finden musste. Im Folgenden habe ich einen doppelten Wert in ein anderes Wörterbuch eingefügt, um zu zeigen, wie es funktioniert:
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()]
Ausgabe:
>>> [(1, {'id': '2345', 'name': 'Tom'}), (3, {'id': '4567', 'name': 'Tom'})]
Diese Lösung findet alle Wörterbücher, die 'Tom' in einem ihrer Werte enthalten.