Python中AttributeError: 'list'无'items'属性的问题修正求助
错误分析与代码修正
错误根源
触发AttributeError: 'list' object has no attribute 'items'的核心原因:
datos_relevantes函数不必要地返回了包含字典的列表(return [datos_relev]),后续代码多次把这个列表当成字典传入函数、直接索引键值,导致调用items()时因列表无此方法报错。calcular_promedio函数内部混淆了函数名和变量名,直接用datos_relevantes["provincia_origen"](函数名)去索引字典键,完全不符合语法逻辑。- 原代码存在逻辑错误:计算平均时未筛选指定省份的数据,直接求和所有数据,结果不符合需求。
修正后的完整代码
1. 修正datos_relevantes函数
直接返回字典,而非包含字典的列表:
def datos_relevantes(datos_str, *args): """ Devuelve los datos de determinados encabezados pasados como parámetros """ datos_relev = {} for arg in args: # 先判断键是否存在,避免无意义循环 if arg in datos_str: datos_relev[arg] = datos_str[arg] return datos_relev
2. 修正calcular_promedio函数
修复变量名混淆问题,同时筛选指定省份的数据进行计算:
def calcular_promedio(datos_str, prov_origen): """ Crear una función 'calcular_promedio' que calcule el promedio de viajeros por viaje en una provincia de origen específica. """ # 获取需要的字段:provincia_origen, viajeros, viajes datos_relevante = datos_relevantes(datos_str, "provincia_origen", "viajeros", "viajes") # 先检查必要字段是否存在 if not all(key in datos_relevante for key in ["provincia_origen", "viajeros", "viajes"]): return "Datos incompletos para calcular el promedio" provincias = datos_relevante["provincia_origen"] viajeros = datos_relevante["viajeros"] viajes = datos_relevante["viajes"] # 筛选出指定省份的对应数据 total_viajeros = 0 total_viajes = 0 for prov, vjrs, vjs in zip(provincias, viajeros, viajes): if prov == prov_origen: total_viajeros += vjrs total_viajes += vjs if total_viajes != 0: promedio = total_viajeros / total_viajes return f"El promedio de viajeros por viaje en {prov_origen} fue: {promedio:.2f}" elif prov_origen in provincias: return f"No hay viajes registrados en {prov_origen}" else: return f"No hay datos registrados para la provincia de origen {prov_origen}"
3. 修正主执行代码
移除无效调用,确保参数传递正确:
# 假设openFile()返回的是如下结构的字典: # { # "provincia_origen": ["Chaco", "Buenos Aires", "Chaco"], # "viajeros": [20, 35, 15], # "viajes": [2, 5, 1], # # 其他字段... # } datos = openFile() provincias_origen = "Chaco" # 直接传入原始datos,由calcular_promedio内部调用datos_relevantes处理 resultado = calcular_promedio(datos, provincias_origen) print(resultado)
关键修正点总结
- 取消
datos_relevantes的列表返回,直接返回字典,避免类型混淆。 - 修复
calcular_promedio中函数名与变量名的误用。 - 添加数据字段合法性检查,避免键不存在的报错。
- 实现指定省份的数据筛选逻辑,确保计算结果符合需求。
内容的提问来源于stack exchange,提问作者Roberto Orazi
相关产品推荐
相关产品推荐

