我有一个列表列表:
list = [[0, 0, 0, 0, 1, 10, 10], [0, 0, 0, 0, 1, 11, 10], [1, 1, 1, 1, 0, 30, 25]]
我想从此列表创建一个字典,其中的键是列表,值是0:
dict = {[0, 0, 0, 0, 1, 10, 10]: 0, [0, 0, 0, 0, 1, 11, 10]: 0, [1, 1, 1, 1, 0, 30, 25]: 0}
我尝试过:dict = {key: 0 for key in list}
但出现错误:TypeError: unhashable type: 'list'
我该如何解决这个问题?
答案 0 :(得分:3)
您不能创建以列表为键的字典,因为列表是可变对象。您可以做的一件事是从tuples
而不是列表创建字典,因为它们可以被散列,因此您可以在docs上查看有关此内容的更多信息,如下所述:
与由数字范围索引的序列不同,字典由键索引,键可以是任何不可变类型
因此,构建字典的一种方法是将列表映射到tuples
,并将其用作keys
:
l = [[0, 0, 0, 0, 1, 10, 10], [0, 0, 0, 0, 1, 11, 10], [1, 1, 1, 1, 0, 30, 25]]
dict.fromkeys(map(tuple, l), 0)
{(0, 0, 0, 0, 1, 10, 10): 0,
(0, 0, 0, 0, 1, 11, 10): 0,
(1, 1, 1, 1, 0, 30, 25): 0}
也请检查Tuples and Sequences以获得更好的理解
答案 1 :(得分:3)
您不能将列表用作键,因为它们是可更改的-因此它们不可散列。您可以将列表转换为元组并将其用作键。
tuples_dict = {tuple(key): 0 for key in lists}
答案 2 :(得分:1)
列表是可变的,因此不能成为字典中的键。将它们转换为元组。此外,请避免将list用作变量。
dict([(tuple(x),0) for x in lst])