如何用Python将TSV数据重组为分组式列表嵌套字典结构?
实现TSV解析数据的分组嵌套重组(Python)
问题场景
原始解析后的TSV数据为平级列表结构:
[ {'id':'group1'}, {'id':'member1', 'parentId':'group1', 'size':51}, {'id':'member2', 'parentId':'group1', 'size':16}, {'id':'group2'}, {'id':'member1', 'parentId':'group2', 'size':21}, # 更多数据... ]
需要将其重组为按分组嵌套的列表结构:
[ [ {'id':'group1'}, {'id':'member1', 'parentId':'group1', 'size':51}, {'id':'member2', 'parentId':'group1', 'size':16} ], [ {'id':'group2'}, {'id':'member1', 'parentId':'group2', 'size':21}, ] ]
核心难点是每个分组的成员数量不固定,无法提前判断分组边界;之前尝试通过计数group出现次数的方法报错'list' object has no attribute 'get',原因是误对列表调用了字典的get()方法。
解决方案代码
original_data = [ {'id':'group1'}, {'id':'member1', 'parentId':'group1', 'size':51}, {'id':'member2', 'parentId':'group1', 'size':16}, {'id':'group2'}, {'id':'member1', 'parentId':'group2', 'size':21}, # 可添加更多测试数据 ] result = [] current_group = None for item in original_data: # 识别分组元素(无parentId字段) if 'parentId' not in item: current_group = [item] result.append(current_group) else: # 将成员元素加入当前分组 if current_group is not None: current_group.append(item) # 输出重组后的结构 print(result)
代码逻辑说明
- 初始化结果列表
result和当前分组变量current_group; - 遍历原始数据中的每个元素:
- 若元素不含
parentId,说明是新分组的起始,创建新的子列表并加入result,同时将该子列表设为当前活跃分组; - 若元素含
parentId,说明是成员,直接追加到当前活跃分组中;
- 若元素不含
- 遍历完成后,
result即为所需的嵌套分组结构。
内容的提问来源于stack exchange,提问作者Arash Howaida
相关产品推荐
相关产品推荐

