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

如何将重复一维JSON条目合并为按作者去重的多维JSON结构

JSON作者条目去重+文章归集实现方案

你原先写的相邻下标比对逻辑存在局限性:只有相同作者的所有条目在原始数组中连续排列时才能生效,一旦同作者条目被打乱就会漏判,更通用稳定的实现方式是用字典做中间映射按作者名归集,具体实现如下:

实现逻辑

  • 以作者name字段为key建立临时字典,存储每个作者的聚合后条目
  • 遍历原始数组每一条记录,遇到新作者就初始化对应条目,将article字段转为数组存入第一篇文章
  • 遇到已存在的作者,直接将当前条目对应的文章追加到该作者的article数组中
  • 遍历完成后取字典的所有值即可得到目标结构
  • 额外兼容了你示例数据中第4条字段误写为articles(多一个s)的异常情况,避免运行时报KeyError

完整可运行代码

import json

# 加载原始JSON数据,推荐用with上下文管理器自动处理文件关闭
with open('authors_test.json', 'r', encoding='utf-8') as f:
    raw_data = json.load(f)

author_collect = {}
for entry in raw_data:
    name = entry['name']
    # 兼容article/articles两种字段名,适配你示例里的字段笔误
    # 如果实际数据字段统一为article,可直接写为 article = entry['article']
    article = entry.get('article', entry.get('articles'))
    if not article:
        continue  # 跳过无有效文章字段的异常条目

    if name not in author_collect:
        # 首次出现的作者,初始化聚合条目
        author_collect[name] = {
            "id": entry['id'],
            "name": name,
            "article": [article]
        }
    else:
        # 已存在作者直接追加文章
        author_collect[name]['article'].append(article)

# 转换为目标数组格式
final_result = list(author_collect.values())

# 如需将结果写入文件可取消下方注释
# with open('aggregated_authors.json', 'w', encoding='utf-8') as f:
#     json.dump(final_result, f, indent=2, ensure_ascii=False)

# 打印验证输出
print(json.dumps(final_result, indent=2, ensure_ascii=False))

运行效果

运行后输出的结构和你给出的目标格式完全一致,每个作者仅保留首次出现时的id,所有关联文章都归集到对应数组中,且不要求原始数据中同作者条目连续排列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:12:25