Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将对象用作字典键_Python_Dictionary - Fatal编程技术网

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'}
出现了两个问题:

  • 该方法不适用于列表或哈希与存储地址不对应的其他对象。在那种情况下我能做什么
  • 在问题(1)中提到的其他条件下,该方法是否不安全

  • 要用作字典键,对象必须支持
    散列
    函数(例如通过
    \uuuuuuuuuuuuu散列
    )、相等比较(例如通过
    \uuuuuuuuueq
    \uuuucmp
    ),并且必须满足上述正确性条件

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

    详情请参阅

    但您可以使用object作为
    ,因为元组是可散列的。因此,可以这样做:

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

    拥有一个以值为键的字典有什么意义?仅当对象可散列(已定义散列)时,才支持它。使用列表或集合有什么问题?因此,您尝试将对象用作字典中的键。我不明白这个动机。你必须把这些东西作为字典的键吗?你能不能把对象放在一个单独的列表中,并使用该列表的索引作为键?这个问题相当学术化,我希望答案能澄清这个问题,而不是类似效果的解决方案:-)