python中:过滤掉DICT列表中某些属性未充分表示的元素

python中:过滤掉DICT列表中某些属性未充分表示的元素,python,Python,我有一份字典清单 [ {'x': 1, 'cat': 1}, {'x': 1, 'cat': 1}, {'x': 1, 'cat': 2}, {'x': 1, 'cat': 1}, {'x': 1, 'cat': 2}, {'x': 1, 'cat': 1}, {'x': 1, 'cat': 2}, {'x': 1, 'cat': 3}] 我需要过滤掉“cat”值出现次数太少的元素 如果我将最小实例数设置为2,则在上面的列表中,包含“

我有一份字典清单

[   {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 3}]
我需要过滤掉“cat”值出现次数太少的元素 如果我将最小实例数设置为2,则在上面的列表中,包含“cat”:3的实例应该被过滤掉,因为“cat”:3在列表中只存在一次,那么“cat”:1和“cat”:2的实例就足够了

输出应该是

[   {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2}]
我不关心顺序,我需要保留原始词典

您可以使用这些词典检查类别的频率,并从足够频繁的类别中构建一个集合:

[   {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 1},
    {'x': 1, 'cat': 2},
    {'x': 1, 'cat': 3}]
import collections
source = [{'x': 1, 'cat': 1},
          {'x': 1, 'cat': 1},
          {'x': 1, 'cat': 2},
          {'x': 1, 'cat': 1},
          {'x': 1, 'cat': 2},
          {'x': 1, 'cat': 1},
          {'x': 1, 'cat': 2},
          {'x': 1, 'cat': 3}]
minimum_count = 2

category_counts = collections.Counter(item['cat'] for item in source)
# category_counts == {1: 4, 2: 3, 3: 1}

frequent_categories = {
    category for category, count in category_counts.items()
    if count > minimum_count
}
# frequent_categories == {1, 2}

result = [item for item in source if item['cat'] in frequent_categories]
您可以尝试以下代码:

l = [ 

{'x': 1, 'cat': 1},

{'x': 1, 'cat': 1},

{'x': 1, 'cat': 2},

{'x': 1, 'cat': 1},

{'x': 1, 'cat': 2},

{'x': 1, 'cat': 1},

{'x': 1, 'cat': 2},

{'x': 1, 'cat': 3}

]

from collections import Counter

def select(l, times):

    counters = Counter(map(lambda x : x['cat'], l)).most_common(times)

    return filter(lambda item: item['cat']  in dict(counters) , l)

print select(l, 2)

决定某一类别是否代表性不足的标准是什么?如果它只出现一次?如果最多出现n次?它是列表中代表性最低的吗?类别应该至少出现n次这是我第一次尝试,想知道是否存在一些不同的类别approach@JackNova这个解决方案有什么你不喜欢的地方吗?@JackNova没有,我的意思是,有不同的方法,如果你能告诉我你不喜欢这个解决方案的地方,我会告诉你(或某人)肯定能想出一个更适合你需要的答案。@JackNove…或者如果你真的对其他答案不再感兴趣,你介意将这个答案标记为已接受吗?谢谢!