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

Python列表转字典报错TypeError: unhashable type: 'list' 咨询

搞定TypeError: unhashable type: 'list'这个问题

嘿,这个错误我太熟悉啦!咱们来一步步拆解问题,搞定它~

为啥会报错?

你碰到的TypeError: unhashable type: 'list',本质原因是你用来遍历的列表d,里面的元素不是你以为的字符串姓名,而是列表类型。字典的键必须是「可哈希」的类型——简单说就是不可变的对象,比如字符串、数字、元组这些,而列表是可变的,没法被哈希,自然不能当字典的键用。

怎么解决?

分两种常见场景来处理:

场景1:d里的每个元素是只装了一个姓名的子列表

比如你的d是这种结构:[["张三"], ["李四"], ["张三"]],那你只需要把每个子列表里的姓名取出来,再作为键存入字典就行:

dic = {}
for item in d:
    # 取出子列表里的第一个元素(也就是姓名)
    name = item[0]
    dic[name] = dic.get(name, 0) + 1
print(dic)

场景2:你需要把整个子列表作为统计的键

如果你的需求是统计整个子列表的出现次数,那可以把可变的列表转成不可变的元组(元组是可哈希的),再作为键:

dic = {}
for item in d:
    # 把列表转成元组,变成可哈希的键
    key = tuple(item)
    dic[key] = dic.get(key, 0) + 1
print(dic)

更省心的写法

其实Python自带了专门做统计的工具collections.Counter,用它能省不少代码:

  • 对应场景1:
from collections import Counter

# 先把所有姓名提取出来,再一键统计
names_list = [item[0] for item in d]
count_dic = Counter(names_list)
print(count_dic)
  • 对应场景2:
from collections import Counter

# 把每个列表转成元组后直接统计
count_dic = Counter(tuple(item) for item in d)
print(count_dic)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:50:42