【问题标题】:Creating dictionary from list of lists where keys are the lists [duplicate]从列表列表创建字典,其中键是列表[重复]
【发布时间】:2019-09-25 04:43:09
【问题描述】:

我有一个列表:

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'

我该如何解决这个问题?

【问题讨论】:

  • 您不能将列表作为键...dict = {tuple(key): 0 for key in list}?

标签: python


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,但在这种情况下,键是元组而不是列表
    • 您不能创建以列表为键的字典,因为它们是可变对象
    • 好的,非常感谢
    • 不客气@HoucineAmraoui !不要忘记您可以投票/接受答案,请参阅What should I do when someone answers my question?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 2021-05-14
      • 2018-01-14
      • 2020-06-24
      相关资源
      最近更新 更多