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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:20:40