从列表列表创建字典,其中关键字是列表[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从列表列表创建字典,其中关键字是列表[重复]相关的知识,希望对你有一定的参考价值。

此问题已经在这里有了答案:

我有一个清单清单:

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:不可散列的类型:'列表'

如何解决此问题?

答案

您不能将列表用作键,因为它们是可更改的-因此它们不可散列。您可以将列表转换为元组并将其用作键。

tuples_dict = tuple(key): 0 for key in lists

另一答案

您不能创建以列表为键的字典,因为列表是mutable对象。您可以做的一件事是从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以获得更好的理解

另一答案

列表是可变的,因此不能是字典中的键。将它们转换为元组。此外,请避免将list用作变量。

dict([(tuple(x),0) for x in lst])

以上是关于从列表列表创建字典,其中关键字是列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

字典:散列表散列字典关键字列表集合与结构体

Python - 从包含值列表的字典中添加具有映射值的新列

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

从嵌套列表创建字典 [重复]

递归遍历带有列表的嵌套字典,并替换匹配的值

字典列表