【问题标题】:set as dictionary key设置为字典键
【发布时间】:2020-05-12 23:47:37
【问题描述】:

我在 Python 中运行了以下代码行,但得到一个标题为“TypeError: unhashable type: 'set'”的错误。我想把那个键变成一个列表。 我该如何解决这个错误?

dictionary = {
    'a' : [[1,2,3],[4,5,6],[7,8,9]],
    'b' : 2,
    {100} : 3
}
print(dictionary['a'][1][2])

【问题讨论】:

标签: python dictionary


【解决方案1】:

字典的键必须是可散列的(或者更好的是:不可变的)。 set 对象是可变的(如列表)

您可以改用frozenset

dictionary = {
    'a' : [[1,2,3],[4,5,6],[7,8,9]],
    'b' : 2,
    frozenset({100}) : 3
}

frozenset 是不可变的set。它是一种内置类型。现在,即使传递由具有重复条目的列表/元组组成的冻结集/列表中的任何顺序,您也可以获得该值,它仍然可以找到该值

>>> dictionary[frozenset((100,100))]
3

【讨论】:

  • 感谢您的回复
  • hashable 意味着不可变,不是吗?
  • frozenset 是什么意思?
  • 您可以通过实现__hash__ 创建非不可变的可散列对象。但不建议这样做。
【解决方案2】:

您不能将set 作为字典键。键必须是可散列的对象(您可以将其解释为不可变的)。所以你可以改用tuple

dictionary = {'a': [[1,2,3],[4,5,6],[7,8,9]], 'b': 2, (100,): 3}

【讨论】:

  • 或者frozenset怎么样?
  • 也可以。
  • 谢谢@RazmikMelikbekyan
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
相关资源
最近更新 更多