python – 对称字典,其中d [a] [b] == d [b] [a]
发布时间:2020-12-20 13:02:08 所属栏目:Python 来源:网络整理
导读:我在 python中有一个算法,它为值对创建度量,其中m(v1,v2)== m(v2,v1)(即它是对称的).我有想法写一个词典字典,其中这些值以一种以内存有效的方式存储,以便可以使用任何顺序的键轻松检索它们.我喜欢从事物中继承,理想情况下,我喜欢写一个symmetric_dict,其中s_
我在
python中有一个算法,它为值对创建度量,其中m(v1,v2)== m(v2,v1)(即它是对称的).我有想法写一个词典字典,其中这些值以一种以内存有效的方式存储,以便可以使用任何顺序的键轻松检索它们.我喜欢从事物中继承,理想情况下,我喜欢写一个symmetric_dict,其中s_d [v1] [v2]总是等于s_d [v2] [v1],可能是通过检查哪个v根据某种类型更大排序关系,然后切换它们,以便始终首先提到较小的元素.即,当调用s_d [5] [2] = 4时,dicts的dict会将它们转过来,以便它们实际上存储为s_d [2] [5] = 4,并且相同以便检索数据.
我也非常开放以获得更好的数据结构,但我更喜欢使用“is-a”关系实现只使用dict并预处理某些函数参数的实现. 解决方法
这是一个看起来很有希望的略有不同的方法.虽然SymDict类不是dict子类,但它的行为大多类似于一个,并且只涉及一个私有字典.我认为一个有趣的特性是,它保留了您似乎想要的自然[] []查找语法.
class SymDict(object): def __init__(self,*args,**kwrds): self._mapping = _SubSymDict(*args,**kwrds) def __getitem__(self,key1): self._mapping.set_key1(key1) return self._mapping def __setitem__(self,key1,value): raise NotImplementedError def __str__(self): return '_mapping: ' + self._mapping.__str__() def __getattr__(self,name): return getattr(self._mapping,name) class _SubSymDict(dict): def __init__(self,**kwrds): dict.__init__(self,**kwrds) def set_key1(self,key1): self.key1 = key1 def __getitem__(self,key2): return dict.__getitem__(self,frozenset((self.key1,key2))) def __setitem__(self,key2,value): dict.__setitem__(self,key2)),value) symdict = SymDict() symdict[2][4] = 24 symdict[4][2] = 42 print 'symdict[2][4]:',symdict[2][4] # symdict[2][4]: 42 print 'symdict[4][2]:',symdict[4][2] # symdict[4][2]: 42 print 'symdict:',symdict # symdict: _mapping: {frozenset([2,4]): 42} print symdict.keys() # [frozenset([2,4])] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |