Après avoir essayé de compter les occurrences d'un élément dans une liste en utilisant le code ci-dessous
from collections import Counter
A = ['a','a','a','b','c','b','c','b','a']
A = Counter(A)
min_threshold = 3
Après avoir appelé Counter sur A
ci-dessus, un objet compteur comme celui-ci est formé:
>>> A
Counter({'a': 4, 'b': 3, 'c': 2})
À partir d'ici, comment filtrer uniquement 'a'
et 'b'
en utilisant une valeur seuil minimale de 3
?
Construisez votre compteur, puis utilisez une compréhension de dict comme deuxième étape de filtrage.
{x : A[x] for x in A if A[x] >= min_threshold}
# {'a': 4, 'b': 3}
Comme couvert par Satish BV , vous pouvez parcourir votre compteur avec une compréhension de dictionnaire. Vous pouvez utiliser des éléments (ou des éléments pour plus d'efficacité et si vous êtes sur Python 2) pour obtenir une séquence de paires de clés (clé, valeur). Ensuite, transformez cela en un compteur.
my_dict = {k: v for k, v in A.iteritems() if v >= min_threshold}
filteredA = Counter(my_dict)
Alternativement, vous pouvez parcourir le compteur d'origine et supprimer les valeurs inutiles.
for k, v in A.items():
if v < min_threshold:
A.pop(k)
Vous pouvez supprimer les clés du dictionnaire en dessous de 3
:
for key, cnts in list(A.items()): # list is important here
if cnts < min_threshold:
del A[key]
Ce qui vous donne:
>>> A
Counter({'a': 4, 'b': 3})
Cela semble plus agréable:
{ x: count for x, count in A if count >= min_threshold }