如何将重复一维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
相关产品推荐
相关产品推荐

