如何解决Python中AttributeError: 'list' object has no attribute 'keys'报错
问题定位与解决方法
错误原因
AttributeError: 'list' object has no attribute 'keys'的触发逻辑非常明确:你代码中多次调用了data.keys()方法,但运行时data变量的实际类型是列表(list),只有字典(dict)类型才支持keys()方法获取所有键名,列表没有该内置方法。
定位步骤
- 首先在当前代码段的最上方添加一行调试代码:
print(type(data), data),运行程序后查看输出,确认data的实际类型和值,就能明确是不是赋值逻辑出了问题。 - 回溯
data变量的来源:如果你原本是要加载单词字典类的数据集(比如JSON格式的词库),大概率是数据加载步骤出错,比如读取JSON时源文件的根结构是数组而非键值对对象,或是加载函数错误返回了列表。
解决方案
根据你的实际业务场景二选一即可:
场景1:业务需要data为字典类型(通过单词键查对应释义)
修改data的加载逻辑,保证最终拿到的data是字典格式。
如果加载后拿到的是列表套字典的结构(比如[{'apple':'苹果'}, {'banana':'香蕉'}]),可以用下述代码把列表合并为字典:
processed_data = {} for item in data: processed_data.update(item) data = processed_data
场景2:业务中data本来就是列表,要匹配列表内的元素
把代码中所有的data.keys()替换为data即可,get_close_matches方法的第二个参数本身就支持传入列表。同时要同步修改if w in data和后续data[xxx]的取值逻辑,适配列表的操作规则,避免后续出现索引类报错。
内容的提问来源于stack exchange,提问作者Manish Verma
相关产品推荐
相关产品推荐

