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

Filter tokens in a list based on 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.'我的代码出了什么问题以及如何处理它?

如果 s 是一个 list 而不是一个集合(就像你在问题中写的那样,但不是在你的示例中的代码中),你可以使用Counter 对象的 most_common 函数获取列表中的前 X 个元素:

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)]

如果您想获取出现次数超过 Y 次的元素,您可以使用:

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

x[0] 是项目(来自列表),x[1] 是频率