Si j'ai quelque chose comme ça:
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
Si je veux par exemple compter le nombre d'occurrences pour le "0" comme une valeur sans avoir à répéter toute la liste, est-ce même possible et comment?
Comme je l'ai mentionné dans les commentaires, vous pouvez utiliser un générateur dans la fonction sum()
comme suit:
sum(value == 0 for value in D.values())
Ou comme approche légèrement plus optimisée et fonctionnelle, vous pouvez utiliser la fonction map
comme suit:
sum(map((0).__eq__, D.values()))
Référence:
In [56]: %timeit sum(map((0).__eq__, D.values()))
1000000 loops, best of 3: 756 ns per loop
In [57]: %timeit sum(value == 0 for value in D.values())
1000000 loops, best of 3: 977 ns per loop
Notez que bien que l'utilisation de la fonction map
dans ce cas puisse être plus optimisée, mais afin d'avoir une idée complète et générale des deux approches, vous devez également exécuter le test de référence pour des ensembles de données relativement volumineux. Ensuite, vous pouvez décider quand l'utiliser pour gagner plus de performances.
Vous pouvez également utiliser collections.Counter
:
from collections import Counter
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
Counter(D.values())[0]
# 3
Vous pouvez le compter en le convertissant en une liste comme suit:
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
print(list(D.values()).count(0))
>>3
Ou itérer sur les valeurs:
print(sum([1 for i in D.values() if i == 0]))
>>3