如何提取集合列表中的唯一集合并统计其出现次数?
集合列表去重与频次统计实现
给定初始字符串列表:
['abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba']
通过list(map(set, x))转换得到集合列表:
[{'a', 'b', 'c'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}, {'f', 'o'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}]
需求一:提取唯一集合
由于普通集合是不可哈希类型,无法直接用set()去重,需先转为可哈希的frozenset处理,再转回普通集合:
original_sets = [{'a', 'b', 'c'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}, {'f', 'o'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}] unique_sets = [set(s) for s in set(frozenset(item) for item in original_sets)] print(unique_sets)
输出结果:
[{'a', 'b', 'c'}, {'f', 'o'}]
需求二:统计各集合出现次数
同样借助frozenset作为字典键(字典键需为可哈希类型),结合defaultdict完成频次统计,最后可将键转回普通集合:
from collections import defaultdict original_sets = [{'a', 'b', 'c'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}, {'f', 'o'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}, {'a', 'b', 'c'}] count_dict = defaultdict(int) for s in original_sets: count_dict[frozenset(s)] += 1 # 转换为以普通集合为键的字典 result_dict = {set(k): v for k, v in count_dict.items()} print(result_dict)
输出结果:
{{'a', 'b', 'c'}: 6, {'f', 'o'}: 1}
内容的提问来源于stack exchange,提问作者Ashtart
相关产品推荐
相关产品推荐

