我有一个字典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'}
出现两个问题:
答案 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'}