Python 2.7 Comptage du nombre d'éléments dans le dictionnaire avec la valeur donnée
première question ici, alors je vais aller droit au but:
à l'aide de python 2.7
J'ai un dictionnaire d'objets, les touches sont d'une coordonnée x,y représenté comme un tuple: (x,y) et toutes les valeurs sont des valeurs Booléennes.
Je suis à essayer de comprendre un rapide et propre méthode pour obtenir un compte de la façon dont de nombreux éléments ont une valeur donnée. Je n'ai PAS besoin de savoir quelles sont les touches qui ont de la valeur donnée, combien de.
il y a un poste similaire ici:
Combien d'articles dans un dictionnaire partagent la même valeur en Python, cependant je n'ai pas besoin d'un dictionnaire retourné, juste un entier.
Ma première pensée est d'itérer sur les éléments et de tester chacun tout en gardant un total de chaque valeur Vraie ou quelque chose. Je me demandais simplement, car je suis encore nouveau pour python et ne connais pas toutes les bibliothèques, si il y a un mieux/plus rapide/plus simple façon de le faire.
merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Cette première partie est surtout pour s'amuser, je n'aurais probablement pas l'utiliser dans mon code.
obtiendrez le nombre de
True
valeurs. (Bien sûr, vous pouvez obtenir le nombre deFalse
valeurs parlen(d) - sum(d.values())
).Légèrement plus généralement, vous pouvez faire quelque chose comme:
Dans ce cas,
if x
fonctionne très bien à la place deif some_condition(x)
et est ce que la plupart des gens seraient d'utilisation dans le monde réel code)DES TROIS SOLUTIONS QUE J'AI POSTÉ ICI, LE CI-DESSUS EST LA PLUS IDIOMATIQUE ET EST CELUI QUE JE RECOMMANDE
Enfin, je suppose que cela pourrait être écrit un peu plus intelligemment:
C'est dans la même veine que mon premier (de plaisir), la solution repose sur le fait que
True + True == 2
. Intelligent n'est pas toujours le meilleur. Je pense que la plupart des gens considèrent cette version à être un peu plus obscur que celui ci-dessus (et donc le pire).sum(1 for i in something if i)
si... (et que faites-vous avec==True
@mgilson) !?1
et0
qui est unpythonic.sum(1 for _ in ... if ...)
idiome. On dirait que c'est trop, mais c'est certainement la plus commune.if i == True
🙁 soiti is True
oui
🙂== True
est complètement inutile pour cet exemple.Si vous voulez une structure de données que vous pouvez rapidement accéder à vérifier le compte, vous pouvez essayer d'utiliser un Compteur (comme @mgilson points, cela s'appuie sur les valeurs elles-mêmes être hashable):
Vous pouvez ensuite brancher une valeur et d'obtenir le nombre de fois où il est apparu: