根据频率过滤列表中的标记

时间:2017-08-16 21:27:54

标签: python filter counter frequency

我正在处理一个列表对象,其中包含几个频率不同的令牌

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>

1 个答案:

答案 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]是频率