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

如何将JSON数据存入Python类并实现重复姓名查询

解决方案

1. 将JSON数据存入Persona类

修改cargaDeDatos函数,遍历加载的JSON数据,提取每个条目中的id和nombre字段,创建Persona类的实例并收集为列表:

import json

class Persona(object):
    def __init__(self, id, nombre):
        self.id = id
        self.nombre = nombre

def cargaDeDatos(ruta):
    personas = []
    with open(ruta, encoding='utf-8') as contenido:
        datos_json = json.load(contenido)
        # 遍历JSON条目,生成Persona实例
        for item in datos_json:
            persona = Persona(id=item['id'], nombre=item['nombre'])
            personas.append(persona)
    return personas

if __name__ == '__main__':
    ruta = 'data/archivo.json' 
    lista_personas = cargaDeDatos(ruta)
    # 验证加载结果
    for p in lista_personas:
        print(f"ID: {p.id}, Nombre: {p.nombre}")

2. 实现查找重复姓名的函数

通过字典统计每个姓名的出现次数,筛选出出现次数大于1的姓名:

def encontrar_nombres_duplicados(lista_personas):
    conteo_nombres = {}
    # 统计姓名出现次数
    for persona in lista_personas:
        nombre = persona.nombre
        conteo_nombres[nombre] = conteo_nombres.get(nombre, 0) + 1
    # 提取重复姓名
    return [nombre for nombre, cnt in conteo_nombres.items() if cnt > 1]

# 在主程序中调用测试
if __name__ == '__main__':
    ruta = 'data/archivo.json' 
    lista_personas = cargaDeDatos(ruta)
    duplicados = encontrar_nombres_duplicados(lista_personas)
    print(f"重复的姓名: {duplicados}")

完整整合代码

将两部分功能合并后的完整代码:

import json

class Persona(object):
    def __init__(self, id, nombre):
        self.id = id
        self.nombre = nombre

def cargaDeDatos(ruta):
    personas = []
    with open(ruta, encoding='utf-8') as contenido:
        datos_json = json.load(contenido)
        for item in datos_json:
            persona = Persona(id=item['id'], nombre=item['nombre'])
            personas.append(persona)
    return personas

def encontrar_nombres_duplicados(lista_personas):
    conteo_nombres = {}
    for persona in lista_personas:
        nombre = persona.nombre
        conteo_nombres[nombre] = conteo_nombres.get(nombre, 0) + 1
    return [nombre for nombre, cnt in conteo_nombres.items() if cnt > 1]

if __name__ == '__main__':
    ruta = 'data/archivo.json' 
    lista_personas = cargaDeDatos(ruta)
    
    print("所有人员信息:")
    for p in lista_personas:
        print(f"ID: {p.id}, Nombre: {p.nombre}")
    
    duplicados = encontrar_nombres_duplicados(lista_personas)
    print(f"\n重复的姓名: {duplicados}")

功能说明

  • cargaDeDatos:负责读取JSON文件并转换为Persona实例列表,忽略JSON中的category字段
  • encontrar_nombres_duplicados:通过字典高效统计姓名出现频率,快速筛选重复项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:56:22