2013-03-28 141 views
2

重点对象我创建了一个类,让我来存储元数据与任意词典按键,仍然与原来的对象类型通过in测试:蟒蛇检索字典

class DictKey: 

    def __init__(self, key): 
     self.hashkey = hash(key) 
     self.member = key 

    def __hash__(self): 
     return self.hashkey 

    def __repr__(self): 
     return 'DictKey(' + self.strkey + ')' 

    def __cmp__(self, o): 
     return cmp(self.member, o) 

d = {} 
key = DictKey('hello') 
d[key] = 'world' 

print key.hashkey 
print hash('hello') 
print key in d 
print 'hello' in d 
print DictKey('hello') in d 

产生输出:

840651671246116861 
840651671246116861 
True 
True 
True 

现在,给出的字符串“你好”,我需要一个从所述串是在固定时间内创建DictKey实例:

if 'hello' in d: 
    #need some way to return the instance of DictKey so I can get at it's member 
    tmp = d.getkey('hello') 
    tmp.member 

回答

2

存储“元”的数据的更传统的方式用一个字典沿着将任一:

  1. 维持两个dict s的相同的密钥集合,一个用于实际的数据,一个用于“元”
  2. dict用(“原始”)键,和值是2元组:(价值,项目的元数据)

两者都是简单的,不需要特殊的魔力。您还可以避免像您在问题中描述的问题(以及其他问题)。

+0

我试图避免使用双字典解决方案,因为不必使用该空间就很好(我们应用程序中的字典可能会变得非常大)。但是,看起来这将是一条路。谢谢! – Hersheezy

+0

@Hersheezy如果你觉得这个答案有帮助,可以随时接受它;) – shx2

0

我做了少许修改你的基本代码:

def __repr__(self): 
    return 'DictKey(' + self.member + ')' 

然后,如果你想检索DictKey的实例中密钥的集合,你可以做到以下几点:

index_of_instance = d.keys().index('hello') 
my_instance_of_dict_key = d.keys()[index_of_instance] 

希望能帮助到你。

+0

这两个调用keys()都是O(n)我相信。我需要查找是恒定的时间。虽然谢谢! – Hersheezy