Лучшая практика/способ получить значение, где id = что-то в списке словарей

#python #list #dictionary

Вопрос:

У меня есть следующий список словарей:

 [{'id': 360004373520, 'value': something1}, {'id': 360004411159, 'value': something2}, {'id': 360004373540, 'value': something}]
 

Я хотел бы получить значение, где id = xxxxxxxxxxxx.

Какой был бы самый быстрый способ?

Комментарии:

1. Под «Я хотел бы получить значение, где id = xxxxxxxxxxxx.», вы имеете в виду, что, например, «вы хотели бы получить значение, где id = 360004411159 » ожидание вывода » something2 «? Может ли быть более одного диктанта/значения с одним и тем же идентификатором? Всегда ли будет хотя бы один дикт/значение с нужным идентификатором?

2. [j for j in l.values() if j==xxxx]

3. да, @MisterMiyagi. Первое, что ты сказал

Ответ №1:

Одним из возможных решений является использование next() встроенного метода:

 lst = [
    {"id": 360004373520, "value": "something1"},
    {"id": 360004411159, "value": "something2"},
    {"id": 360004373540, "value": "something"},
]

to_search = 360004411159

value = next(d["value"] for d in lst if d["id"] == to_search)
print(value)
 

С принтами:

 something2
 

Или: Если вы выполняете поиск несколько раз, стоит подумать о преобразовании списка в словарь:

 to_search = 360004411159


dct = {d["id"]: d["value"] for d in lst}
print(dct[to_search])
 

Комментарии:

1. с первым вариантом произойдет сбой, когда он найдет переменную для поиска, верно? для того, чтобы не повторять все диктанты

2. @ToninoFernandez Да, это правда, он сломается, когда совпадение будет найдено.

Ответ №2:

Это одно из возможных решений:

 for key in lst:
    if key['id']=='xxxxxx':
       #do something