Python如何将元组列表转换为按字段分组的指定格式字典列表
问题修正方案
你当前写的defaultdict逻辑已经完成了最核心的按z值分组的步骤,距离目标格式只差2步:
- 给每个分组新增
x字段,值为当前分组对应的z值 - 把分组后以z为key的字典结构,拆成列表形式,每个元素就是一个目标字典
注:你给出的期望输出中case/base/standard对应的数值和输入元组的实际值不匹配,以下代码以输入元组的原始值为准,如果需要做数值换算(比如按比例缩放、聚合计算),在赋值y值的位置增加对应计算逻辑即可。
基于你现有代码的修改版本
直接在你原有代码的基础上补全转换逻辑即可,这个方案时间复杂度为O(n),数据量大的时候性能最好:
from collections import defaultdict list_tuple= [('base', 5313, 3), ('case', 156, 3), ('standard', 482, 3),('base', 432, 4), ('case', 43, 4), ('standard', 44, 4)] dict_tuple = defaultdict(dict) for x, y, z in list_tuple: dict_tuple[z][x] = y # 补全格式转换步骤 result = [] for group_key, group_content in dict_tuple.items(): target_item = {"x": group_key} target_item.update(group_content) result.append(target_item)
运行后得到的输出为:
[{'x': 3, 'base': 5313, 'case': 156, 'standard': 482}, {'x': 4, 'base': 432, 'case': 43, 'standard': 44}]
其他可选实现
如果不想导入collections模块,也可以用普通字典实现相同逻辑,写法更直接:
list_tuple= [('base', 5313, 3), ('case', 156, 3), ('standard', 482, 3),('base', 432, 4), ('case', 43, 4), ('standard', 44, 4)] result = {} for k, val, x_val in list_tuple: if x_val not in result: result[x_val] = {"x": x_val} result[x_val][k] = val # 转成目标列表格式 result = list(result.values())
内容的提问来源于stack exchange,提问作者Olude david
相关产品推荐
相关产品推荐

