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

Python遍历字典数组遇TypeError与AttributeError问题求助(仅允许修改数据结构)

解决字典数组遍历的属性访问问题

我来帮你梳理下问题根源和解决方案:

首先,你遇到的第一个错误 AttributeError: 'dict' object has no attribute 'table_id' 其实很明确——你的total是字典列表,字典的键必须用方括号语法(比如t['table_id'])访问,而不是点号(.table_id),因为字典没有所谓的“属性”,只有键值对。

但你说无法修改循环结构(也就是不能把t.table_id改成t['table_id']),那我们就从调整数据结构入手,把字典转换成可以用点号访问属性的对象,最简便的方式是用Python标准库的collections.namedtuple:

具体步骤:

  • 定义一个与字典键名完全匹配的namedtuple类,用来封装每个条目
  • 把原始的字典列表转换成namedtuple实例列表
  • 再运行你原来的循环代码就不会报错了

完整示例代码:

from collections import namedtuple
import datetime

# 定义namedtuple,字段名和字典的键保持一致
TableRecord = namedtuple('TableRecord', ['table_id', 'created'])

# 你的原始数据
total = [
    {'table_id': 'IA_AUTO_2020-11-25', 'created': datetime.datetime(2020, 11, 25, 5, 36, 1, 281000, tzinfo=datetime.timezone.utc)},
    {'table_id': 'IA_AUTO_2020-12-07', 'created': datetime.datetime(2020, 12, 7, 5, 55, 4, 142000, tzinfo=datetime.timezone.utc)},
    {'table_id': 'IA_AUTO_2020-12-09', 'created': datetime.datetime(2020, 12, 9, 5, 52, 55, 48000, tzinfo=datetime.timezone.utc)}
]

# 转换数据结构:字典 → namedtuple实例
total = [TableRecord(**item) for item in total]

# 你原来的遍历代码,现在可以正常运行
n=[]
d=[]
for t in total:
    n.append(t.table_id)
    d.append(t.created)
    total.append(t.table_id)
    total.append(t.created)
print(n)

关于第二个错误 TypeError: 'list' object is not callable

这个错误是因为你不小心把列表total当成函数调用了(比如代码里写了total('trending_CL')),这是语法错误,确保循环是for t in total:而不是调用列表。另外要注意:你的循环里一直在往total里追加字符串和datetime对象,这会导致无限循环(列表长度不断增加),而且后续循环到这些非namedtuple元素时,依然会出现属性访问错误。如果这不是你的预期行为,可能需要重新考量需求,但如果必须保留现有循环结构,上面的转换至少能解决最初的AttributeError问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:03:11