Python 将对象用作字典键
我有一本字典Python 将对象用作字典键,python,dictionary,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)中提到的其他条件下,该方法是否不安全 要用作字典键,对象
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'}
出现了两个问题:
要用作字典键,对象必须支持
散列
函数(例如通过\uuuuuuuuuuuuu散列
)、相等比较(例如通过\uuuuuuuuueq
或\uuuucmp
),并且必须满足上述正确性条件
也就是说,为什么列表不能用作字典键,最简单的答案是列表没有提供有效的\uuuuuuuuuuuuuuuuuuuuuuu
方法。
详情请参阅
但您可以使用object作为键
,因为元组是可散列的。因此,可以这样做:
>>> e = (1, 2, 3)
>>> d = {a: 'a', b: 'b', c: 'c', e: 'e'}
拥有一个以值为键的字典有什么意义?仅当对象可散列(已定义散列)时,才支持它。使用列表或集合有什么问题?因此,您尝试将对象用作字典中的键。我不明白这个动机。你必须把这些东西作为字典的键吗?你能不能把对象放在一个单独的列表中,并使用该列表的索引作为键?这个问题相当学术化,我希望答案能澄清这个问题,而不是类似效果的解决方案:-)