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

如何利用字典推导式将Pandas中键列表列与值列表列转换为字典列

解决Pandas中把行内列表对转为字典列的问题

你遇到的TypeError: unhashable type: 'list'是因为之前的写法搞错了操作层级——你试图把整个行的keys列表当作字典的键,把values列表当作对应的值,但列表是不可哈希的类型,不能作为字典的键,这才抛出了错误。

正确的实现方式

我们需要对每一行的keys和values列表分别进行zip操作,把对应位置的元素配对成字典的键值对,而不是把整个列表作为键值对。这里有两种简洁的实现方法:

方法1:使用列表推导式(推荐,速度更快)

df['dicts'] = [dict(zip(k_list, v_list)) for k_list, v_list in zip(df['keys'], df['values'])]

这个写法会遍历df['keys']和df['values']的每一对行元素,把每行的两个列表内部元素一一配对,再转成字典。

方法2:使用apply函数

df['dicts'] = df.apply(lambda row: dict(zip(row['keys'], row['values'])), axis=1)

apply会逐行处理数据,axis=1表示按行操作,每行的row['keys']和row['values']就是对应的两个列表,用zip配对后转成字典即可。

验证结果

运行上述代码后,你的DataFrame会生成预期的dicts列:

keysvaluesdicts
0['key1','key2','key3'][0,1,2]{'key1':0,'key2':1,'key3':2}
1['key1','key2','key3'][4,5,6]{'key1':4,'key2':5,'key3':6}
2['key2','key1','key3'][7,3,6]{'key2':7,'key1':3,'key3':6}

为什么之前的写法失败?

回顾你尝试的两种写法:

  1. {k:v for (k,v) in [x for x in zip(df['keys'], df['values'])]}:这里的k是每行的keys列表,v是values列表,你试图把列表作为字典的键,而列表不可哈希,所以报错。
  2. dict(zip(df['keys'], df['values'])):同样的问题,zip(df['keys'], df['values'])生成的是(keys列表, values列表)这样的元组,dict()会把每个keys列表当作键,这显然不符合你的需求,也会触发同样的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:12:48