【发布时间】:2017-07-15 21:19:28
【问题描述】:
我有一个复杂的数据结构,本质上是一个字典,其中的键是散列实例。如果我只知道等于键的散列值,我怎样才能取回实例?我可以通过蛮力做到这一点,但似乎我应该能够在 O(1) 时间内获得密钥/实例。
class Test:
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
self.arr = ["extra"]
def __str__(self):
return self.foo + self.bar
def __hash__(self):
return hash(str(self))
def __eq__(self, other):
return hash(self) == hash(other)
my_thing = Test("FOO", "BAR")
my_dict = dict()
my_dict[my_thing] = 1
for k, v in my_dict.iteritems():
if k == "FOOBAR":
print k.arr
编辑:我希望能够获取实例中的可变数据(在本例中为数组)。因此,如果我只知道"FOOBAR" 的哈希值,我希望能够获得["extra"],而不必遍历整个字典匹配键(底部的 for 循环)
【问题讨论】:
-
def __eq__(self, other): return hash(self) == hash(other)这很糟糕:哈希冲突怎么办? -
所以要再次获取
my_thing? -
那绝对不会是真的
if k == "FOOBAR":你的意思是if str(k) == "FOOBAR":对吧? -
字典并不是为了让您在 O(1) 时间内从一个值(无论如何这必然是模棱两可的)中获取对应的键。
-
我认为 OP 认为字典只存储哈希作为它的键。如果你这样做
print(type(k)),你会发现这不是真的。
标签: python class dictionary