我正在处理一个列表对象,其中包含几个频率不同的令牌
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)]
我想设置一个过滤器,通过该过滤器只选择出现两次的标记,并且我在当前的尝试中使用以下代码
select = [word for word in s if list(s).count(word) >= 2]
select
我认为这很简单,但我没有'select'的输出。我的代码出了什么问题以及如何处理它?</ p>
答案 0 :(得分:3)
如果s
是列表而不是一组(就像您在问题中写的那样,但在示例中的代码中没有),则可以使用{{1} } most_common
对象的函数来获取列表中的前X个元素:
Counter
如果您想要获得超过Y次的元素,您可以使用:
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)]
In [71]: [x[0] for x in c.items() if x[1] >= 2]
Out[71]: ['book', 'cup']
是项目(来自列表),x[0]
是频率