Відповідь, запропонована @faham, є приємною однолінійкою, але вона не повертає індекс до словника, що містить значення. Натомість він повертає сам словник. Ось простий спосіб отримати: Список індексів один або більше, якщо їх більше, або порожній список, якщо таких немає:
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()]
Вихід:
>>> [1]
Мені подобається такий підхід, що за допомогою простого редагування ви можете отримати список як індексів, так і словників у вигляді кортежів. Це проблема, яку мені потрібно було вирішити, і я знайшла ці відповіді. Далі я додав у іншому словнику повторне значення, щоб показати, як він працює:
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()]
Вихід:
>>> [(1, {'id': '2345', 'name': 'Tom'}), (3, {'id': '4567', 'name': 'Tom'})]
Це рішення знаходить усі словники, що містять «Том» у будь-якому їх значенні.