📅  最后修改于: 2023-12-03 15:04:11.752000             🧑  作者: Mango
有时候在数据处理过程中,需要仅保留出现 N 次 K 的记录。在 Python 中,可以使用 defaultdict 和 Counter 两个类来轻松处理此类问题。
defaultdict 是 collections 模块中的一个类,它是一种特殊的字典,当字典中的键不存在时,会创建一个默认值(默认为 0)。
我们可以使用 defaultdict 来计算每个记录的出现次数,然后筛选出出现 N 次的记录。
from collections import defaultdict
data = [('a', 1), ('b', 2), ('a', 3), ('c', 4), ('b', 5)]
counts = defaultdict(int)
for key, value in data:
counts[key] += 1
result = [(key, value) for key, value in data if counts[key] == 2]
print(result)
输出结果为:
[('b', 2), ('b', 5)]
上面的代码中,我们首先定义了一个包含记录的列表 data,然后使用 defaultdict 创建了一个名为 counts 的字典,用于计算每个记录出现的次数。接着,我们遍历列表 data 中的每个元素,并将对应键的计数器加一。最后,我们使用列表推导式从 data 中筛选出出现 N 次(这里是 2 次)的记录。
Counter 是 collections 模块中的另一个类,它是一个计数器,用于统计可迭代对象中每个元素出现的次数。和 defaultdict 一样,Counter 也可以用于计算每个记录的出现次数,然后筛选出出现 N 次的记录。
from collections import Counter
data = [('a', 1), ('b', 2), ('a', 3), ('c', 4), ('b', 5)]
counts = Counter([key for key, value in data])
result = [(key, value) for key, value in data if counts[key] == 2]
print(result)
输出结果和前面的例子相同:
[('b', 2), ('b', 5)]
上面的代码中,我们首先创建一个名为 counts 的 Counter,用于计算每个记录出现的次数。具体来说,我们使用列表推导式将数据中的键收集到一个列表中,然后将这个列表作为参数传递给 Counter。接着,我们使用列表推导式从 data 中筛选出出现 N 次(这里是 2 次)的记录。
总结
使用 defaultdict 或 Counter 类,可以用几行代码轻松处理出现 N 次 K 的记录这类问题。如果您还不熟悉这两个类,建议先阅读官方文档,以便更好地掌握它们的用法。