¿Cuál es la mejor manera de buscar un valor de diccionario de Python en una lista de diccionarios?

Tengo la siguiente estructura de datos:

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

Quiero buscar en la lista anterior para ver si tiene algún sitio con un valor específico. Por ejemplo, busque lo anterior para ver si la lista contiene un diccionario con sitio = ‘Superusuario’ y devuelva Verdadero / Falso. Puedo hacer lo anterior, la forma habitual de hacer un bucle sobre cada elemento y compararlos. ¿Hay alguna forma alternativa de lograr una búsqueda?

 any(d['site'] == 'Superuser' for d in data) 
 filter( lambda x: x['site']=='Superuser', data ) 

Las listas requieren absolutamente bucles. Para eso son las listas.

Para evitar bucles tienes que evitar listas.

Quieres diccionarios de claves de búsqueda y objetos.

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

Ahora puede encontrar el elemento asociado con “Superusuario” en los sites["Superuser"] mediante una búsqueda hash en lugar de un bucle.

No estoy seguro de la syntax de python, pero podría funcionar de esta manera. Al crear su estructura de datos primaria, también cree una paralela que sea un hash o una matriz asociativa con clave en el nombre del sitio; luego, para ver si existe un sitio determinado, intente realizar una búsqueda en el hash con el nombre del sitio. Si tiene éxito, sabe que hay un registro en su estructura de datos para ese sitio y lo ha hecho en el momento de la búsqueda de hash (probablemente O (1) u O (log2 (n)) en función de la técnica de hash) de la O (n / 2) de la lista transversal.

(actualizado mientras escribo: esto es más o menos lo que S.Lott publicó)