使用对象作为字典键

时间:2016-11-18 11:45:25

标签: python dictionary

我有一个字典d,它存储有关对象的一些信息:

class A:
    def __init__(self, x):
        self.x = x

a = A(1)
b = A(1)
c = 'hello world'
e = [1, 2, 3]

d = {a: 'a', b: 'b', c: 'c', e: 'e'}

出现两个问题:

  1. 该方法不适用于列表或散列与存储地址不对应的其他对象。在那种情况下我该怎么办?
  2. 在问题(1)中提到的其他条件下,这种做法是否不安全?

1 个答案:

答案 0 :(得分:2)

要用作字典键,对象必须支持hash函数(例如通过__hash__),相等比较(例如通过__eq____cmp__),并且必须满足上述正确性条件。

也就是说,为什么列表不能用作字典键的简单答案是列表不提供有效的__hash__方法。

请参阅Why Lists Can't Be Dictionary Keys?了解详细信息。

但您可以使用tuple()对象代替key,因为元组是可清除的。因此,它是有效的:

>>> e = (1, 2, 3)
>>> d = {a: 'a', b: 'b', c: 'c', e: 'e'}