Каков наилучший способ поиска значения словаря Python в списке словарей?

У меня есть следующая структура данных:

  data = [
      {'site': 'Stackoverflow', 'id': 1},
      {'site': 'Superuser', 'id': 2}, 
      {'site': 'Serverfault', 'id': 3}
  ]

Я хочу выполнить поиск в указанном выше списке, чтобы узнать, есть ли у него какой-либо сайт с определенным значением. Например, выполните поиск выше, чтобы увидеть, содержит ли список словарь с сайтом = "Суперпользователь" и возвращает True/False. Я могу сделать это обычным способом обхода каждого элемента и сравнения его. Есть ли альтернативный способ для поиска?

Ответ 1

any(d['site'] == 'Superuser' for d in data)

Ответ 2

filter( lambda x: x['site']=='Superuser', data )

Ответ 3

Списки абсолютно требуют циклов. Что списки для.

Чтобы избежать цикла, вам нужно избегать списков.

Вы хотите словари поисковых ключей и объектов.

sites = dict( (d['site'],d) for d in data )
ids = dict( (d['id'],d] for d in data )

Теперь вы можете найти элемент, связанный с "Суперпользователем" с помощью sites["Superuser"], используя хешированный поиск вместо цикла.

Ответ 4

Я не уверен в синтаксисе python, но он может работать для вас таким образом. Создавая свою основную структуру данных, также создавайте параллельную структуру, в которую помещается хэш или ассоциативный массив на имя сайта; то, чтобы увидеть, существует ли данный сайт, вы пытаетесь выполнить поиск в хеше с именем сайта. Если это удается, вы знаете, что в вашей структуре данных для этого сайта есть запись, и вы сделали это во время поиска хэша (вероятно, O (1) или O (log2 (n)) в зависимости от метода хеширования) вместо O (n/2) обхода списка.

(обновляется при записи: это в значительной степени то, что опубликовал S.Lott)