Python:根据键从集合中获取项目

Jay*_*hik 3 python

我有一个使用自定义哈希方法的类.

class Test(object):

    def __init__(self, key, value):
        self.key = key # key is unique
        self.value = value

    def __hash__(self):
        # 'value' is unhashable, so return the hash of 'key'
        return hash(self.key)
Run Code Online (Sandbox Code Playgroud)

我创建了set这个类的使用对象.

t0, t1, t2 = Test(0, 10), Test(1, 5), Test(2, 10)
s = set([t0, t1, t2])
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法从s使用中找到对象key?即我想做:

find_using_key(s, 1) # should return [t1]
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过迭代集合中的项目来做到这一点,但我觉得应该有一个O(1)方法来做到这一点,因为key有效地确定了"位置" set.

Nik*_* B. 9

...因为键有效地确定了集合中的"位置"

那不是真的.具有相同的两个元素key可以在集合中共存:

>>> t0, t1 = Test(1,1), Test(1,2)
>>> len(set((t0,t1)))
2
Run Code Online (Sandbox Code Playgroud)

哈希值不定义相等性.这也是不可能的,因为你可以有哈希冲突.

至于你的问题:不要使用set.它由一个带有操作insertfind的抽象接口定义.它不提供您想要的操作.潜在的底层实现是否理论上可以支持您想要的操作并不是真正相关的.而是使用a dict,并将键与实例相关联.

  • @JayanthKoushik:你在这里混淆了一些东西:`set`只是一个接口,像*insert*和*find*这样的操作集合.它不提供任何更多.是否使用哈希表实现是由实现决定的 (4认同)