过滤出发生次数少于最小阈值的元素

时间:2017-06-24 09:27:08

标签: python counter

尝试使用以下代码计算列表中元素的出现次数

from collections import Counter
A = ['a','a','a','b','c','b','c','b','a']
A = Counter(A)
min_threshold = 3

在上面的A上调用Counter后,会形成一个这样的计数器对象:

>>> A
Counter({'a': 4, 'b': 3, 'c': 2})

从这里开始,如何使用'a'的最小阈值仅过滤'b'3

4 个答案:

答案 0 :(得分:13)

构建你的计数器,然后使用dict理解作为第二个过滤步骤。

{x : A[x] for x in A if A[x] >= min_threshold}
# {'a': 4, 'b': 3}

答案 1 :(得分:2)

您可以从字典中删除3下面的键:

for key, cnts in list(A.items()):   # list is important here
    if cnts < min_threshold:
        del A[key]

这给了你:

>>> A
Counter({'a': 4, 'b': 3})

答案 2 :(得分:2)

Satish BV所述,您可以使用词典理解来迭代您的计数器。您可以使用项目(或者iteritems以获得更高的效率,如果您使用的是Python 2)来获取一系列(键,值)元组对。 然后把它变成一个柜台。

my_dict = {k: v for k, v in A.iteritems() if v >= min_threshold}
filteredA = Counter(my_dict)

或者,您可以迭代原始计数器并删除不必要的值。

for k, v in A.items():
    if v < min_threshold:
        A.pop(k)

答案 3 :(得分:1)

这看起来更好:

{ x: count for x, count in A if A[x] >= min_threshold }