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

Python3写入字典到CSV时出现‘str’对象无‘keys’属性错误

问题解决:Python3中csv.DictWriter写入字典报错AttributeError

错误原因

你用csv.DictWriter.writerows(idDict)时犯了关键错误:writerows()方法要求传入由字典组成的可迭代对象,但直接传入字典idDict时,Python3会默认迭代字典的键(字符串类型)。每个字符串被当成要写入的元素时,DictWriter会尝试获取它的keys()方法,自然抛出AttributeError: 'str' object has no attribute 'keys'。

解决方案

根据需求,有两种可行的修复方式:

方式1:继续使用DictWriter,转换数据格式

把原字典转换成符合DictWriter要求的字典列表,每个元素对应CSV的一行,键对应表头headers:

# 创建字典
idDict = dict(zip(idList, pageTitles)) 

# 写入CSV,Python3中建议添加newline=''避免生成多余空行
with open('csvfile', 'w', newline='') as csvFile:
    writer = csv.DictWriter(csvFile, fieldnames=headers)
    writer.writeheader()
    # 将键值对转换为符合格式的字典列表
    writer.writerows([{headers[0]: key, headers[1]: value} for key, value in idDict.items()])

方式2:改用csv.Writer,更简洁

如果不需要依赖DictWriter的特性,用普通的csv.Writer会更直接,因为你的数据本身就是键值对结构:

# 创建字典
idDict = dict(zip(idList, pageTitles)) 

with open('csvfile', 'w', newline='') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerow(headers)  # 写入表头
    writer.writerows(idDict.items())  # 直接写入所有键值对行

补充说明

Python2中字典迭代行为和Python3一致,可能你之前的Python2代码是传入idDict.items()而非idDict,所以没出现错误。迁移到Python3时要注意这类细节差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:28:14