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

如何在Python中正确读取写入CSV的字典?解决读取报错

解决从CSV文件读取字典的两个问题

我来帮你搞定这两个问题,先逐个拆解原因,再给你靠谱的解决代码:

第一个错误:IndexError: list index out of range

原因分析

你用csv.reader的时候,它默认按逗号分割每行内容,但你的dict.csv里每行是用空格分隔键和列表字符串,而且列表内部也有空格。这就导致csv.reader把整行当成一个单独的元素,rows列表里只有rows[0],自然取不到rows[1],就抛出了索引越界的错误。

修复代码

我们可以手动分割每行,只分割一次(把键和后面的列表字符串分开),再用ast.literal_eval把字符串形式的列表转成真正的Python列表(比eval更安全,不会执行恶意代码):

import csv
import ast

my_dict = {}
with open('dict.csv', 'r') as csv_file:
    for line in csv_file:
        # 去掉换行符,只分割一次,避免拆分列表内部的空格
        key, value_str = line.strip().split(maxsplit=1)
        # 把字符串转成列表
        my_dict[key] = ast.literal_eval(value_str)

print(my_dict)

第二个错误:UnicodeDecodeError

原因分析

pd.read_csv默认用utf-8编码读取文件,但你的文件可能是用其他编码保存的(比如Windows系统常见的gbk、cp1252编码),所以解码时就会报错。

修复代码

你需要指定正确的编码,同时处理好每行的分割逻辑:

import pandas as pd
import ast

my_dict = {}
# 先尝试不同编码(比如gbk、cp1252),直到不报错
df = pd.read_csv('dict.csv', sep=' ', header=None, maxsplit=1, encoding='gbk')

for _, row in df.iterrows():
    key = row[0]
    value_str = row[1]
    my_dict[key] = ast.literal_eval(value_str)

print(my_dict)

额外建议:优化写入CSV的方式

其实你之前的写入方式有点不规范,导致读取时容易出问题。建议写入时把列表转成字符串,用逗号分隔键和值,这样读取会更顺畅:

import csv

# 示例字典
my_dict = {
    'accord': [16, 32, 49],
    'according': [8, 37, 49, 50],
    'accordingly': [8, 37, 50],
    'account': [8, 10, 16, 19, 20, 23, 25, 33, 34, 47]
}

with open('dict.csv', 'w', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file)
    for key, value in my_dict.items():
        # 把列表转成字符串后写入
        writer.writerow([key, str(value)])

这样写入的CSV每行格式是accord,"[16, 32, 49]"(csv.writer会自动给带空格的字符串加引号),读取时用csv.reader就能直接拿到键和值字符串,再转成列表即可:

import csv
import ast

my_dict = {}
with open('dict.csv', 'r', encoding='utf-8') as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
        key = row[0]
        value_str = row[1]
        my_dict[key] = ast.literal_eval(value_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:18:50