web-dev-qa-db-fra.com

compter le nombre d'occurrences d'une certaine valeur dans un dictionnaire en python?

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?

8
RowanX

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.

13
Kasramvd

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
6
blacksite

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
3
user1767754