Python字典中如何按key A分组统计key B对应值的唯一计数
Python字典分组统计实现方案
方法1:纯Python原生实现(无第三方依赖)
实现逻辑:先将A、B数组的元素按位置配对,按A的取值分组存储对应B的取值(用集合自动去重),最后统计每组集合长度整理为目标格式。
dict_1 = {'A': ['a','b','b','c','c','c'], 'B':['1','2','2','1','2','3']} group_map = {} for a_val, b_val in zip(dict_1['A'], dict_1['B']): if a_val not in group_map: group_map[a_val] = set() group_map[a_val].add(b_val) result = { 'A': list(group_map.keys()), 'unique_count_B': [str(len(v)) for v in group_map.values()] } print(result) # 输出:{'A': ['a', 'b', 'c'], 'unique_count_B': ['1', '1', '3']}
注意:Python 3.7及以上版本原生字典默认保留插入顺序,可直接得到和原数据A元素首次出现顺序一致的结果;3.7以下版本可使用collections.OrderedDict替代普通字典存储group_map保证顺序。
方法2:pandas实现(适合大数据量场景)
如果已经安装pandas库,可直接调用分组统计接口,代码更简洁:
import pandas as pd dict_1 = {'A': ['a','b','b','c','c','c'], 'B':['1','2','2','1','2','3']} df = pd.DataFrame(dict_1) grouped = df.groupby('A')['B'].nunique().reset_index() result = { 'A': grouped['A'].tolist(), 'unique_count_B': grouped['B'].astype(str).tolist() } print(result) # 输出:{'A': ['a', 'b', 'c'], 'unique_count_B': ['1', '1', '3']}
内容的提问来源于stack exchange,提问作者Iwishworldpeace
相关产品推荐
相关产品推荐

