我在尝试使用列表理解从元组创建字典时遇到 TypeError: unhashable type: 'list' ,并且我无法弄清楚为什么会发生此错误,因为我没有在代码中使用任何列表.
这是导致问题的代码片段:
data = (
'abcdefg',
(10, 20, 30, 40, 50),
(55, 81, 33, 44)
)
# I want to convert this into a dictionary where keys are indices and values are lengths of each element in 'data'
# The expected dictionary should be {0: 7, 1: 5, 2: 4}
# My initial approach without list comprehension worked fine:
# lens = dict()
# for el in enumerate(data):
# lens[el[0]] = len(el[1])
# But when I try to use list comprehension, I get an error
lens = {[el[0]]: len(el[1]) for el in enumerate(data)}
print(lens)
我期望列表理解的工作方式与循环类似,但事实并非如此。有人可以解释为什么会发生这种类型错误以及如何在这种情况下正确使用列表理解吗?
我建议这样:
data = (
'abcdefg',
(10, 20, 30, 40, 50),
(55,81, 33, 44)
)
# TODO from this:
# lens = dict()
#
# for el in enumerate(data):
# lens[el[0]] = len(el[1])
# TODO to this
lens = {el[0]: len(el[1]) for el in enumerate(data)}
print(lens)
[el[0]]
生成一个列表。您不能将列表存储为 python 字典中的键。即使列表只有一个元素。
您需要的是 el[0]
作为您的钥匙。
输出:
{0: 7, 1: 5, 2: 4}