A resposta oferecida por @faham é uma ótima linha, mas não retorna o índice para o dicionário que contém o valor. Em vez disso, ele retorna o próprio dicionário. Aqui está uma maneira simples de obter: Uma lista de índices, um ou mais, se houver mais de um, ou uma lista vazia, se não houver:
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()]
Resultado:
>>> [1]
O que eu gosto nessa abordagem é que, com uma edição simples, você pode obter uma lista dos índices e dos dicionários como tuplas. Este é o problema que eu precisava resolver e encontrei essas respostas. A seguir, adicionei um valor duplicado em um dicionário diferente para mostrar como ele funciona:
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()]
Resultado:
>>> [(1, {'id': '2345', 'name': 'Tom'}), (3, {'id': '4567', 'name': 'Tom'})]
Esta solução localiza todos os dicionários que contêm 'Tom' em qualquer um de seus valores.