¿Cómo verificar si todos los valores de un diccionario son 0, en Python?

Quiero comprobar si todos los valores, es decir, los valores correspondientes a todas las claves de un diccionario son 0. ¿Hay alguna forma de hacerlo sin bucles? ¿Si es así, cómo?

utilizar all() :

 all(value == 0 for value in your_dict.values()) 

all devuelve True si todos los elementos del iterable dado son verdaderos.

Con all :

 >>> d = {1:0, 2:0, 3:1} >>> all(x==0 for x in d.values()) False >>> d[3] = 0 >>> all(x==0 for x in d.values()) True 

No importa si utiliza any o all , la evaluación será perezosa. all devuelve False en el primer valor falsy que encuentra. any retorno True en el primer valor de verdad que encuentra.

Por lo tanto, not any(d.values()) le dará el mismo resultado para el diccionario de ejemplo que proporcioné. Es un poco más corto que all versiones con la comprensión del generador. Personalmente, todavía me gusta más la variante completa porque expresa lo que quieres sin que el lector tenga que hacer la negación lógica en su cabeza.

Sin embargo, hay un problema más con el uso de any aquí:

 >>> d = {1:[], 2:{}, 3:''} >>> not any(d.values()) True 

El diccionario no contiene el valor 0, pero not any(d.values()) devolverá True porque todos los valores son falsos, es decir, bool(value) devuelve False para una lista vacía, diccionario o cadena.

En resumen: la legibilidad cuenta, sea explícito, use la solución completa.

Puede usar el método any () , básicamente verifica los parámetros booleanos, pero 0 actuará como Falso en este caso, y cualquier otro número como Verdadero. Prueba este código PY2:

 dict1 = {"a": 0, "b": 1} dict2 = {"a": 0, "b": 0} print not any(dict1.itervalues()) print not any(dict2.itervalues()) 

PY3: dict1 = {“a”: 0, “b”: 1} dict2 = {“a”: 0, “b”: 0}

 print(not any(dict1.values())) print(not any(dict2.values())) 

Salida:

 False True 

Edit2: una nota al margen / precaución, llamar a cualquier () con una lista vacía de elementos devolverá False. Edit3: Gracias por los comentarios, actualice el código para reflejar los cambios de python 3 en la iteración del diccionario y la función de impresión.

También puedes hacerlo de la otra manera usando:

 >>> any(x != 0 for x in somedict.values()) 

Si devuelve True, entonces todas las claves no son 0, sino todas las claves son 0