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

