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

如何将Pandas中带方括号的字符串列转为以列表为键的字典?

解决方案

首先明确两个关键点:

  • 你用ast.literal_eval转换列的思路是对的,但需要正确提取单个行的数值,而非直接对整列调用tolist()
  • Python中列表不能作为字典的键(列表是可变类型,不可哈希),所以你期望的{['1', '2', '3']:['A', 'B']}在Python中无法创建,会抛出TypeError: unhashable type: 'list'错误,建议用元组(不可变、可哈希)替代列表作为键。

具体实现步骤

  1. 导入依赖库并构造示例DataFrame
import pandas as pd
import ast

# 构造你的样本DataFrame
df = pd.DataFrame({
    'name': ["['A', 'B']"],
    'items': ["['1', '2', '3']"]
})
  1. 将字符串格式的"列表"转换为实际的Python列表
# 对name和items列分别应用ast.literal_eval
df['name'] = df['name'].apply(ast.literal_eval)
df['items'] = df['items'].apply(ast.literal_eval)
  1. 创建目标字典(用元组作为键)
    如果你的DataFrame只有一行数据,可直接提取单个元素:
# 获取转换后的列表
name_list = df['name'].iloc[0]
items_tuple = tuple(df['items'].iloc[0])

# 生成字典
dict1 = {items_tuple: name_list}

如果DataFrame有多行数据,用迭代方式生成:

dict1 = {}
for _, row in df.iterrows():
    dict1[tuple(row['items'])] = row['name']

关于你之前的疑惑

调用df['name'].tolist()得到[['A', 'B']]是因为tolist()会把整个列的所有元素打包成一个列表,而你的列中只有一个元素(即['A','B']这个列表),所以结果是嵌套列表。要获取单个行的列表值,用iloc[0](取第一行)或者iat[0]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:01:16