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

Python中如何合并JSON列表内同名对象的多个项目数据为列表

同名人员项目归集实现方法

你当前逐次追加单条目的写法不会自动做同名合并,可通过字典以姓名为唯一键遍历归集,以下是可直接运行的实现代码:


基础实现(无额外依赖)

# 此处替换为你从接口解析得到的原始条目列表
raw_data = [
    {"name":"Lucas White", "project":{"key_project":"EB-648", "name_status":"Open"}},
    {"name":"Lisa Booth", "project":{"key_project":"EB-647", "name_status":"Open"}},
    {"name":"Lucas White", "project":{"key_project":"EB-645", "name_status":"Development In Progress"}}
]

merged_result = {}
for item in raw_data:
    user_name = item["name"]
    # 首次遇到该姓名时初始化条目结构
    if user_name not in merged_result:
        merged_result[user_name] = {
            "name": user_name,
            "project_keys": [], # 存归集后的key_project
            "projects": [] # 如果你需要保留完整项目信息(含状态)就留这个字段
        }
    # 追加当前项目key到列表
    merged_result[user_name]["project_keys"].append(item["project"]["key_project"])
    # 如果要保留完整项目信息就打开下面这行
    # merged_result[user_name]["projects"].append(item["project"])

# 转成列表格式输出
final_list = list(merged_result.values())

输出效果

[
    {
        "name": "Lucas White",
        "project_keys": ["EB-648", "EB-645"],
        "projects": [
            {"key_project":"EB-648", "name_status":"Open"},
            {"key_project":"EB-645", "name_status":"Development In Progress"}
        ]
    },
    {
        "name": "Lisa Booth",
        "project_keys": ["EB-647"],
        "projects": [{"key_project":"EB-647", "name_status":"Open"}]
    }
]

简化写法(使用标准库defaultdict)

如果不想手动判断键是否存在,可以用Python标准库collections.defaultdict减少冗余判断:

from collections import defaultdict

merged_result = defaultdict(lambda: {"name": "", "project_keys": [], "projects": []})
for item in raw_data:
    user_name = item["name"]
    merged_result[user_name]["name"] = user_name
    merged_result[user_name]["project_keys"].append(item["project"]["key_project"])
    merged_result[user_name]["projects"].append(item["project"])

final_list = list(merged_result.values())

注意事项

  • 不建议长期用姓名字段做唯一归集键,如果后续出现同名不同人的情况会导致数据混淆,有人员唯一ID的话优先用ID做键
  • 你贴出的原始JSON片段存在语法问题(缺少外层列表包裹、Lisa Booth对应条目后缺失逗号),实际处理接口返回数据时用json.loads()方法解析即可自动校验格式,不用手动修正。

内容的提问来源于stack exchange,提问作者Vendrix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:24:10