Какой самый простой способ искать список дамт в Python?

StackOverflow https://stackoverflow.com/questions/3924397

  •  29-09-2019
  •  | 
  •  

Вопрос

Моя база данных в настоящее время возвращает список дамт:

id_list = ({'id': '0c871320cf5111df87da000c29196d3d'}, 
           {'id': '2eeeb9f4cf5111df87da000c29196d3d'}, 
           {'id': '3b982384cf5111df87da000c29196d3d'}, 
           {'id': '3f6f3fcecf5111df87da000c29196d3d'}, 
           {'id': '44762370cf5111df87da000c29196d3d'}, 
           {'id': '4ba0d294cf5111df87da000c29196d3d'})

Как я могу легко проверить, находится ли данный идентификатор в этом списке или нет?

Спасибо.

Это было полезно?

Решение

Если вы сделаете словарь своего идентификатора поиска,

search_dic = {'id': '0c871320cf5111df87da000c29196d3d'}

id_list = ({'id': '0c871320cf5111df87da000c29196d3d'}, 
           {'id': '2eeeb9f4cf5111df87da000c29196d3d'}, 
           {'id': '3b982384cf5111df87da000c29196d3d'}, 
           {'id': '3f6f3fcecf5111df87da000c29196d3d'}, 
           {'id': '44762370cf5111df87da000c29196d3d'}, 
           {'id': '4ba0d294cf5111df87da000c29196d3d'})


if search_dic in id_list:
    print 'yes'

Другие советы

Вот однострочный:

if some_id in [d.get('id') for d in id_list]:
    pass

Хотя не очень эффективно.

редактировать - Лучший подход может быть:

if some_id in (d.get('id') for d in id_list):
    pass

Таким образом, список не генерируется в полной длине заранее.

Как я могу легко проверить, находится ли данный идентификатор в этом списке или нет?

Сделать набор

keys = set( d['id'] for d in id_list )
if some_value in keys

Не спрашивайте, является ли это «эффективным» или «лучшим». Это включает в себя стандартный компромисс.

Создание набора требует времени. Но поиск тогда мгновенный.

  • Если вы делаете много поисков, стоимость строительства набора амортизируется по каждому поиску.

  • Если вы делаете несколько поисков, стоимость строительства набора может быть выше, чем что -то Ilike{'id':some_value} in id_list.

any(x.get('id')==given_id for x in id_list)

. Анкет Анкет Анкет Возвращает логический. Эффективность? См. Ответ С.лотта

Вы можете сгладить его с помощью понимания списка и использовать в:

id in [d['id'] for d in id_list]

Вы также можете использовать выражения генератора, которые имеют различные характеристики производительности (и будут использовать меньше памяти, если ваш список огромный):

id in (d['id'] for d in id_list)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top