使用列表推导式从元组创建字典时遭遇TypeError问题求助
问题分析与解决
错误原因
你遇到的TypeError: unhashable type: 'list',根源在于你在字典推导式里把列表当成了字典的键:
lens = {[el[0]]: len(el[1]) for el in enumerate(data)}
这里的[el[0]]是一个包含单个元素的列表,而Python字典的键必须是**可哈希(hashable)**的类型——简单来说就是不可变类型(比如整数、字符串、元组等)。列表是可变类型,无法被哈希,所以不能作为字典的键。你误以为没用到列表,但这里确实用方括号创建了列表。
正确的字典推导式写法
只需要去掉键外面的方括号,直接用索引值作为键即可,和你循环写法里的逻辑保持一致:
lens = {el[0]: len(el[1]) for el in enumerate(data)}
或者更直观的写法,直接解包enumerate返回的元组,代码可读性更高:
lens = {idx: len(item) for idx, item in enumerate(data)}
运行这段代码就能得到你预期的结果:{0: 7, 1: 5, 2: 4}。
内容的提问来源于stack exchange,提问作者neznajut
相关产品推荐
相关产品推荐

