使用Python实现列表中多字典数据的分组聚合处理
Python多字典列表按指定键分组聚合实现
需求描述
对包含多个字典的列表,按字典中a键的取值做分组,同组内的b、c键对应值聚合为元组,最终输出指定结构的结果。
输入输出示例
输入数据:
input_list = [{'a': '1', 'b':'2','c':'10'},{'a': '1', 'b':'3','c':'11'},{'a':'2','b':'19','c':'100'}]
期望输出:
[{'1': {'b': ('2','3'), 'c': ('10','11')}, '2': {'b': ('19',), 'c': ('100',)}}]
实现代码
from collections import defaultdict input_list = [{'a': '1', 'b':'2','c':'10'},{'a': '1', 'b':'3','c':'11'},{'a':'2','b':'19','c':'100'}] # 初始化分组容器 group_data = defaultdict(lambda: {'b': [], 'c': []}) for item in input_list: a_key = item['a'] group_data[a_key]['b'].append(item['b']) group_data[a_key]['c'].append(item['c']) # 转换为要求的输出结构 result = [ {k: {'b': tuple(v['b']), 'c': tuple(v['c'])} for k, v in group_data.items()} ] print(result)
补充说明
如果需要严格匹配你给出的示例中单值不加逗号的写法(注意该写法实际在Python中是普通数值,不是元组),可以修改转换逻辑:
def list_to_tuple_or_single(lst): return lst[0] if len(lst) == 1 else tuple(lst) result = [ {k: {'b': list_to_tuple_or_single(v['b']), 'c': list_to_tuple_or_single(v['c'])} for k, v in group_data.items()} ]
运行后得到的输出就和你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

