web-dev-qa-db-fra.com

Filtrer les éléments qui se produisent moins de fois qu'un seuil minimum

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?

14
Satish BV

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}
18
cs95

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)
2
MikeCPT

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})
2
MSeifert

Cela semble plus agréable:

{ x: count for x, count in A if count >= min_threshold }
1
Ido Zehori