You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含重复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:08:38