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

将字典写入CSV文件时遇TypeError: String indices must be integers错误求助

解决CSV生成时的"String indices must be integers"错误

想要生成表头为['Username', 'INFO', 'ERROR']的CSV表格,遇到"String indices must be integers"错误,尝试排查后仍无法解决,以下是代码及报错信息:

import csv

dict_data = {'ac': {'INFO': 2, 'ERROR': 2}, 'ahmed.miller': {'INFO': 2, 'ERROR': 4}, 'blossom': {'INFO': 2, 'ERROR': 6}, 'bpacheco': {'INFO': 0, 'ERROR': 2}, 'breee': {'INFO': 1, 'ERROR': 5}, 'britanni': {'INFO': 1, 'ERROR': 1}, 'enim.non': {'INFO': 2, 'ERROR': 3}, 'flavia': {'INFO': 0, 'ERROR': 5}, 'jackowens': {'INFO': 2, 'ERROR': 4}, 'kirknixon': {'INFO': 2, 'ERROR': 1}, 'mai.hendrix': {'INFO': 0, 'ERROR': 3}, 'mcintosh': {'INFO': 4, 'ERROR': 3}, 'mdouglas': {'INFO': 2, 'ERROR': 3}, 'montanap': {'INFO': 0, 'ERROR': 4}, 'noel': {'INFO': 6, 'ERROR': 3}, 'nonummy': {'INFO': 2, 'ERROR': 3}, 'oren': {'INFO': 2, 'ERROR': 7}, 'rr.robinson': {'INFO': 2, 'ERROR': 1}, 'sri': {'INFO': 2, 'ERROR': 2}, 'xlg': {'INFO': 0, 'ERROR': 4}}

with open("testinggg.csv", 'w') as output:
fields = ['Username', 'INFO', 'ERROR']
writer = csv.DictWriter(output, fieldnames=fields)
writer.writeheader()
for m in dict_data:
  print(m)
  writer.writerow({'Username': str(m[0]), 'INFO': str(m[1]['error']), 'ERROR': str(m[1]['info'])})

报错信息:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: string indices must be integers

错误原因分析

  • 直接遍历dict_data时,变量m是字典的键(字符串类型),比如'ac',此时m[0]会取字符串第一个字符,但m[1]会报错——要么字符串长度不足,要么误解了遍历方式,误以为m是(key, value)对。
  • 代码中用小写的'error'和'info'访问字典键,但原数据里的键是大写的'ERROR'和'INFO',即使遍历方式正确,也会引发KeyError。

解决方案及修正代码

修正关键点:

  1. 使用dict_data.items()遍历,同时获取用户名(键)和对应的统计数据(值)
  2. 直接使用用户名作为Username字段值,无需截取字符
  3. 匹配原字典的键名,使用大写的'INFO'和'ERROR'

修正后的代码:

import csv

dict_data = {'ac': {'INFO': 2, 'ERROR': 2}, 'ahmed.miller': {'INFO': 2, 'ERROR': 4}, 'blossom': {'INFO': 2, 'ERROR': 6}, 'bpacheco': {'INFO': 0, 'ERROR': 2}, 'breee': {'INFO': 1, 'ERROR': 5}, 'britanni': {'INFO': 1, 'ERROR': 1}, 'enim.non': {'INFO': 2, 'ERROR': 3}, 'flavia': {'INFO': 0, 'ERROR': 5}, 'jackowens': {'INFO': 2, 'ERROR': 4}, 'kirknixon': {'INFO': 2, 'ERROR': 1}, 'mai.hendrix': {'INFO': 0, 'ERROR': 3}, 'mcintosh': {'INFO': 4, 'ERROR': 3}, 'mdouglas': {'INFO': 2, 'ERROR': 3}, 'montanap': {'INFO': 0, 'ERROR': 4}, 'noel': {'INFO': 6, 'ERROR': 3}, 'nonummy': {'INFO': 2, 'ERROR': 3}, 'oren': {'INFO': 2, 'ERROR': 7}, 'rr.robinson': {'INFO': 2, 'ERROR': 1}, 'sri': {'INFO': 2, 'ERROR': 2}, 'xlg': {'INFO': 0, 'ERROR': 4}}

with open("testinggg.csv", 'w', newline='') as output:
    fields = ['Username', 'INFO', 'ERROR']
    writer = csv.DictWriter(output, fieldnames=fields)
    writer.writeheader()
    for username, stats in dict_data.items():
        writer.writerow({
            'Username': username,
            'INFO': stats['INFO'],
            'ERROR': stats['ERROR']
        })

补充说明:

  • 添加newline=''是为了避免Windows系统下CSV出现空行的问题
  • 无需将整数转成字符串,csv.DictWriter会自动处理数据类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:11:04