J'ai un problème de comptage de valeurs distinctes pour chaque clé de Python.
J'ai un dictionnaire D comme p> J'ai besoin d'imprimer le nombre de valeurs distinctes par Chaque clé individuellement. p> Cela signifie que je voudrais imprimer p> aide. p> merci p> p>
6 Réponses :
>>> d = [{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"},
... {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"},
... {"pqr":"sports"}]
>>> from collections import Counter
>>> counts = Counter(key for dic in d for key in dic.keys())
>>> counts
Counter({'pqr': 5, 'abc': 3, 'xyz': 1})
>>> for key in counts:
... print (key, counts[key])
...
xyz 1
abc 3
pqr 5
Plus de 6 ans après avoir répondu, quelqu'un m'a signalé que j'ai mal interprété la question. Tandis que ma réponse originale (ci-dessous) compte unique Keys em> dans la séquence d'entrée, vous avez réellement un PROBLÈME DONNÉ DIFFICILE ; Vous voulez compter les valeurs par clé em>. Pour compter les valeurs uniques par clé, exactement em>, vous devez collecter ces valeurs en ensembles d'abord: P> qui pour votre entrée, produit: p> Nous pouvons toujours envelopper cet objet dans un compteur () code > instance si vous souhaitez utiliser la fonctionnalité supplémentaire de cette classe offre, voir ci-dessous: p> for key, count in counts.most_common():
print '{}: {}'.format(key, count)
# prints
# 5: pqr
# 3: abc
# 1: xyz
C'est très cool mais cela ne résout pas le problème. On a demandé des valeurs uniques. PQR CODE> retourne 5 mais devrait être renvoyé 4. CC: user1189851
@Seandunford: intéressant; On dirait en effet que j'ai mal interprété la question à l'époque, je ne sais pas pourquoi la OP a ensuite accepté ma réponse. Je vais le mettre à jour pour ajouter un nombre d'uniques-per-clés aussi.
@ Keandunford: Là-bas, a ajouté les comptes à droite à l'aide des ensembles et de quoi faire lorsque vous avez beaucoup plus de données que la mémoire.
Qu'est-ce que vous décrivez - une liste avec plusieurs valeurs pour chaque touche - serait mieux visualisée par quelque chose comme ceci: dans ce cas, vous devez faire un peu Plus de travail à insérer: p> Cela conduit également à un moyen simple de compter le nombre total d'éléments stockés: p>
[] code> (Liste vide) li>
ul> li>
si la valeur dans code> Pour voir si la valeur en cours de vérification existe dans la liste LI>
.append () code> il li>
ol>
Utilisez une collection.Counter. En supposant que vous ayez une liste de dictionnaires d'un article ...
from collections import Counter
listOfDictionaries = [{'abc':'movies'}, {'abc':'sports'}, {'abc':'music'},
{'xyz':'music'}, {'pqr':'music'}, {'pqr':'movies'},
{'pqr':'sports'}, {'pqr':'news'}, {'pqr':'sports'}]
Counter(list(dict)[0] for dict in zzz)
Pas besoin d'utiliser un compteur. Vous pouvez y parvenir de cette manière:
# input dictionary
d=[{"abc":"movies"}, {"abc": "sports"}, {"abc": "music"}, {"xyz": "music"}, {"pqr":"music"}, {"pqr":"movies"},{"pqr":"sports"}, {"pqr":"news"}, {"pqr":"sports"}]
# fetch keys
b=[j[0] for i in d for j in i.items()]
# print output
for k in list(set(b)):
print "{0}: {1}".format(k, b.count(k))
Cela est encore plus rapide que d'utiliser avec compteur.
Oui, le compteur a des problèmes de performance Stackoverflow.com/Questtions/27801945/...
bâtiment de la solution @akashdeep qui utilise l'ensemble mais donne un résultat erroné, car il ne compte pas pour l'exigence "distincte" mentionnée dans la question ( pqr code> devrait être 4, pas 5). xyz: 1
abc: 3
pqr: 4
Vous voulez dire que vous avez une liste de dictionnaires? Ou est-il reproduit de manière incorrecte?
Ce n'est pas un dictionnaire, c'est au mieux une liste de dictionnaires (qui contiennent uniquement une paire de clé / valeur) - vraiment? Quel genre de structure de données est-ce? Et je suppose que c'est en fait
[{"abc": "films"}, ... code>, non?@Timpietzcker c'est vrai. Désolé pour l'erreur dans la représentation
Voir Stackoverflow.com/questions/10303788/...