从列表列表创建字典,其中键是列表

时间:2019-05-07 13:38:48

标签: python

我有一个列表列表:

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'

我该如何解决这个问题?

3 个答案:

答案 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])