2017-08-16 3 views
0

Je travaille sur un objet liste contenant plusieurs jetons avec une fréquence différentejetons de filtre dans une liste en fonction de la fréquence

from collections import Counter 

s = {'book', 
'car', 
'bird', 
'cup', 
'book', 
'cup', 
'river'} 

print(Counter(s)) 

[('book': 2), ('cup': 2), ('river': 1), ('car': 1), ('bird': 1)] 

Je veux définir un filtre par lequel seront sélectionnés seulement des jetons qui sont apparus deux fois, et mon utilisation le code suivant dans ma tentative actuelle

select = [word for word in s if list(s).count(word) >= 2] 
select 

Je pensais que c'est très simple, mais je ne l'ai pas une sortie de « select ». Qu'est-ce qui n'a pas fonctionné avec mon code et comment y faire face?

+4

Vous montrez un * ensemble *, qui aura seulement chaque valeur unique * une fois *. S'il vous plaît donner un [mcve]; Notez que les extraits de pile sont pour HTML/CSS/JS et ne supportent pas Python. – jonrsharpe

Répondre

1

Dans le cas s est une liste et non un ensemble (comme vous avez écrit dans votre question, mais pas dans le code dans votre exemple), vous pouvez utiliser la fonction most_common de l'objet Counter pour obtenir les premiers éléments X dans votre liste:

In [67]: s = ['book', 
    ...: 'car', 
    ...: 'bird', 
    ...: 'cup', 
    ...: 'book', 
    ...: 'cup', 
    ...: 'river'] 

In [68]: s 
Out[68]: ['book', 'car', 'bird', 'cup', 'book', 'cup', 'river'] 

In [69]: c = Counter(s) 

In [70]: c.most_common(2) 
Out[70]: [('book', 2), ('cup', 2)] 

Si vous souhaitez obtenir des éléments qui apparaissent plus que Y fois vous pouvez utiliser:

In [71]: [x[0] for x in c.items() if x[1] >= 2] 
Out[71]: ['book', 'cup'] 

x[0] est l'élément (f de la liste) et x[1] est la fréquence

+0

Ce n'est pas pour ça que je le veux, '.most_common()' ne fait que les classer. –

+0

Vérifiez la mise à jour dans la réponse – Dekel

+0

@ChrisT. avez-vous vérifié la mise à jour? – Dekel