加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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])]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读