2010-03-19 11 views
8

Tengo una lista de diccionarios. Necesito comprobar si todos los diccionarios en esa lista están vacíos. Estoy buscando una declaración simple que lo haga en una línea.Python: compruebe si todos los diccionarios en la lista están vacíos

¿Existe una sola línea para hacer lo siguiente (sin incluir la impresión)?

l = [{},{},{}] # this list is generated elsewhere... 
all_empty = True 
for i in l: 
    if i: 
    all_empty = False 

print all_empty 

Algo nuevo en Python ... No sé si hay una taquigrafía incorporado en forma de comprobar esto. Gracias por adelantado.

Respuesta

19
all(not d for d in l) 
+1

Funcionó como un amuleto. Gracias. – Brant

+0

También 'all (len (d) == 0 para d en l)', que es más detallado sobre lo que significa "vacío". –

+0

Más detallado no significa más pitónico, es por eso que preferiría la versión de Jimmy. –

10

not any(d for d in l) es equivalente a De Morgan's Lawall(not d for d in l), pero se aplica sólo una not operador. El comportamiento de cortocircuito también es equivalente.

Editar 1: la genexp interior es en realidad (pero inocua) redundante: not any(l) es más rápida y concisa.

Editar 2: un comentario afirma que all(not d for d in l) es "más de lo que quiere expresar" que not any(l), y muy en desacuerdo: incluso en lenguaje natural, "todos los elementos de la lista son despoblado" no es más normal, directo o claro que "ningún elemento de la lista está poblado" - más allá de la equivalencia lógica absoluta por las leyes de la lógica, las dos formas de expresión son muy cercanas y aproximadamente equivalentes en términos de psicología humana, también.

+7

"no any (l)" es suficiente. –

+1

Guau, alguien subió un martellibot; D –

+0

Sin embargo, es el viejo enigma: Jimmy está cerca de lo que realmente quiere expresar (todo el vacío), mientras 'no any (l)' es (probablemente, refugio) t lo midió) más rápido. –

10

not any(d for d in l) podría acortarse a solo not any(l) en este caso.

Cuestiones relacionadas