如何将含重复id的字典列表转换为按id分组的嵌套结构
解决按ID分组生成嵌套
member_info的问题 我来帮你搞定这个需求!你想要把含重复ID的字典列表按ID分组,把对应的name和status嵌套到member_info里,这里提供两种可行的方法:
方法一:纯Python实现(无需依赖第三方库)
这种方法不用额外安装库,直接遍历处理,逻辑清晰易懂:
original_list = [ {'id': '1', 'name': 'John', 'status': 'active'}, {'id': '1', 'name': 'Doe', 'status': 'active'}, {'id': '2', 'name': 'Jane', 'status': 'inactive'}, {'id': '2', 'name': 'Appleseed', 'status': 'active'} ] # 用临时字典按id暂存分组数据 temp_group = {} for item in original_list: item_id = item['id'] # 提取当前项的name和status组成子字典 member_detail = {'name': item['name'], 'status': item['status']} if item_id not in temp_group: # 首次遇到该id,初始化分组结构 temp_group[item_id] = {'id': item_id, 'member_info': [member_detail]} else: # 已有该id,直接追加到member_info列表 temp_group[item_id]['member_info'].append(member_detail) # 把字典的值转成目标格式的列表 list_2 = list(temp_group.values()) print(list_2)
这种方法适合数据量不大的场景,没有库依赖,运行后就能得到你想要的嵌套结构。
方法二:改进后的pandas实现
你之前用pandas的groupby没得到预期结果,是因为agg()没有指定正确的聚合逻辑,且没把ID保留为独立字段。调整后的代码如下:
import pandas as pd original_list = [ {'id': '1', 'name': 'John', 'status': 'active'}, {'id': '1', 'name': 'Doe', 'status': 'active'}, {'id': '2', 'name': 'Jane', 'status': 'inactive'}, {'id': '2', 'name': 'Appleseed', 'status': 'active'} ] df = pd.DataFrame(original_list) # 按id分组,将每组的name和status转为字典列表 grouped_df = df.groupby('id').apply( lambda x: x[['name', 'status']].to_dict('records') ).reset_index(name='member_info') # 转为目标格式的字典列表 list_2 = grouped_df.to_dict('records') print(list_2)
这里的核心调整点:
- 用
apply配合to_dict('records'),把每组的name和status直接转成嵌套的字典列表 - 通过
reset_index把ID从分组索引变回普通列,同时把聚合后的列重命名为member_info - 最后用
to_dict('records')生成你需要的列表结构
运行后就能得到和目标完全一致的结果啦。
内容的提问来源于stack exchange,提问作者devidkarundeng
相关产品推荐
相关产品推荐

