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

如何在Python中统计多段JSON数据中的重复值

如何在Python中统计多段JSON数据中的重复值

嘿,我来帮你搞定这个多段JSON重复值统计的问题!从你给出的示例和代码片段来看,你的数据是每行一个独立的JSON对象(不是标准的JSON数组),我们可以基于这个特点来完善代码,实现不同维度的重复值统计。

先看你的JSON数据示例:

{"authors":[{"ids":["4888852"],"name":"Andrea D. Foebel"},{"ids":["3325893"],"name":"John P. Hirdes"},{"ids":["5316482"],"name":"George A. Heckman"}]}
{"authors":[{"ids":["4836831"],"name":"A. S. Gavrish"},{"ids":["4061357"],"name":"E. N. Kilimnik"}]}
{"authors":[{"ids":["4888852"],"name":"A. S. Gavrish"},{"ids":["4061357"],"name":"E. N. Kilimnik"}]}

你的已有代码片段(我帮你补全了读取逻辑):

import csv
import json
import pandas as pd
from itertools import islice
from collections import Counter

data = []
# 逐行读取多段JSON文件(每行一个独立JSON对象)
with open('your_data.json', 'r') as f:
    for line in f:
        # 跳过空行,解析有效JSON
        line = line.strip()
        if not line:
            continue
        try:
            obj = json.loads(line)
            data.append(obj)
        except json.JSONDecodeError as e:
            print(f"跳过无效JSON行: {line},错误信息: {e}")

接下来是几种常见的统计需求实现:

1. 统计重复的作者ID(忽略名字差异)

如果你的核心需求是找出重复出现的作者ID(比如示例中4888852出现了两次),可以用下面的代码:

# 提取所有作者的ID(假设每个作者的ids数组只有一个元素)
all_author_ids = []
for entry in data:
    for author in entry['authors']:
        author_id = author['ids'][0]
        all_author_ids.append(author_id)

# 用Counter统计重复ID
id_count = Counter(all_author_ids)
print("=== 重复作者ID统计 ===")
for author_id, count in id_count.items():
    if count > 1:
        print(f"ID {author_id} 共出现 {count} 次")

2. 统计重复的作者名字(忽略ID差异)

如果想找出重名的作者,不管ID是否相同,可以这样做:

# 提取所有作者名字
all_author_names = []
for entry in data:
    for author in entry['authors']:
        all_author_names.append(author['name'])

name_count = Counter(all_author_names)
print("\n=== 重复作者名字统计 ===")
for name, count in name_count.items():
    if count > 1:
        print(f"名字 '{name}' 共出现 {count} 次")

3. 统计完全匹配的作者条目(ID和名字都一致)

如果要找出ID和名字完全相同的重复作者,可以把每个作者的信息转成元组再统计:

# 提取所有作者的(ID, 名字)元组
author_identifiers = []
for entry in data:
    for author in entry['authors']:
        author_tuple = (author['ids'][0], author['name'])
        author_identifiers.append(author_tuple)

full_match_count = Counter(author_identifiers)
print("\n=== 完全匹配的作者条目统计 ===")
for (author_id, name), count in full_match_count.items():
    if count > 1:
        print(f"作者(ID: {author_id}, 名字: {name}) 共出现 {count} 次")

4. 额外:找出同一ID对应不同名字的异常情况

从你的示例里能看到4888852这个ID对应了两个不同的名字,如果你想排查这种不一致的情况,可以用这个代码:

# 用字典记录每个ID对应的所有名字
id_name_map = {}
for entry in data:
    for author in entry['authors']:
        author_id = author['ids'][0]
        name = author['name']
        if author_id not in id_name_map:
            id_name_map[author_id] = set()
        id_name_map[author_id].add(name)

print("\n=== 同一ID对应多个名字的异常情况 ===")
for author_id, names in id_name_map.items():
    if len(names) > 1:
        print(f"ID {author_id} 关联的名字有: {', '.join(names)}")

这些代码都是基于你给出的依赖库(Counter是关键工具)来实现的,你可以根据自己的实际需求选择对应的统计逻辑。如果你的JSON数据格式有变化(比如一个作者有多个ID),只需要稍微调整提取字段的逻辑就可以啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:12:11