Voglio verificare se tutti i valori, cioè i valori corrispondenti a tutti i tasti in un dizionario sono 0. C'è un modo per farlo senza loop? Se é cosi, come?Come verificare se tutti i valori di un dizionario sono 0, in Python?
risposta
uso all()
:
all(value == 0 for value in your_dict.values())
all
restituisce True
se tutti gli elementi della data iterabile sono vere.
È possibile utilizzare il metodo any(), in pratica controlla i parametri booleani, ma in questo caso 0 fungerà da Falso e qualsiasi altro numero come Vero. Prova questo codice:
dict1 = {"a": 0, "b": 1}
dict2 = {"a": 0, "b": 0}
print not any(dict1.itervalues())
print not any(dict2.itervalues())
uscita:
False
True
Edit2: una nota a margine/cautela, di chiamare qualsiasi() con un elenco vuoto di elementi restituisce false.
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
Non importa se si utilizza any
o all
, la valutazione sarà pigro. all
restituisce False
sul primo valore di falsi che incontra. any
restituisce True
sul primo valore di verità che incontra.
Pertanto, not any(d.values())
fornirà lo stesso risultato per il dizionario di esempio fornito. È un po 'più corto della versione all
con la comprensione del generatore. Personalmente, mi piace ancora la variante all
perché esprime ciò che vuoi senza che il lettore debba fare la negazione logica nella sua testa.
C'è un problema più con l'utilizzo di any
qui, però:
>>> d = {1:[], 2:{}, 3:''}
>>> not any(d.values())
True
Il dizionario non contiene il valore 0, ma not any(d.values())
sarà tornare True
perché tutti i valori sono falsy, cioè bool(value)
rendimenti False
per una lista vuota , dizionario o stringa.
In breve: conteggi di leggibilità, essere espliciti, utilizzare la soluzione all
.
Il 'not any' valuterà su True se tutti i valori sono _falsey_, quindi è diverso dal test se tutti i valori sono uguali a' 0'. –
Si può anche fare il contrario utilizzando qualsiasi:
>>> any(x != 0 for x in somedict.values())
Se restituisce True, tutti i tasti non sono 0, altrimenti tutti i tasti sono 0
Come hai fatto con un ciclo continuo? –
ho iterato attraverso il dizionario e ho controllato tutti i valori i valori corrispondenti a tutte le chiavi se anche uno non era vero ho cambiato il valore del flag e ho interrotto il ciclo. –