对称字典,其中d [a] [b] == d [b] [a]

Fel*_*bek 3 python inheritance dictionary

我在python中有一个算法,它为值对创建度量,其中m(v1, v2) == m(v2, v1)(即它是对称的).我有想法写一个词典字典,其中这些值以一种以内存有效的方式存储,以便可以使用任何顺序的键轻松检索它们.我喜欢从事物中继承,理想情况下,我喜欢写一个总是等于的symmetric_dict地方,可能是根据某种排序关系检查哪个v更大然后切换它们以便更小的元素总是首先提到.也就是说,在调用时,dicts的字典会将它们转过来,以便它们实际上存储为s_d[v1][v2]s_d[v2][v1]s_d[5][2] = 4s_d[2][5] = 4,以及检索数据的相同.我也非常开放以获得更好的数据结构,但我更喜欢使用"is-a"关系实现只使用dict并预处理某些函数参数的实现.

Dav*_*ebb 10

你可以使用a frozenset作为你的dict的关键:

>>> s_d = {}
>>> s_d[frozenset([5,2])] = 4
>>> s_d[frozenset([2,5])]
4
Run Code Online (Sandbox Code Playgroud)

编写一个dict将iterables作为关键参数然后frozenset在存储值时转为a的子类是相当简单的:

class SymDict(dict):
    def __getitem__(self, key):
        return dict.__getitem__(self, frozenset(key))

    def __setitem__(self, key, value):
        dict.__setitem__(self, frozenset(key), value)
Run Code Online (Sandbox Code Playgroud)

哪个给你:

>>> s_d = SymDict()
>>> s_d[5,2] = 4
>>> s_d[2,5]
4
Run Code Online (Sandbox Code Playgroud)