关于python:有没有更好的方法来存储twoway字典而不是存储它的反向分离?

Is there a better way to store a twoway dictionary than storing its inverse separate?

本问题已经有最佳答案,请猛点这里访问。

给定一个一对一的字典(双射)àla生

1
2
for key, value in someGenerator:
     myDict[key] = value

西安反查词典可以很容易的城市综合创新

1
    invDict[value] = key

两个for回路。但这是一个Python的方式吗?我应该写一class Bijection(dict)而不是这本词典manages倒在提供第二加法器和查找功能。或是这样的(或类似的结构(一)已经存在了吗?


我过去所做的是创建一个reversedict函数,该函数接受一个dict并返回相反的映射,如果我知道它是一对一的,则返回键的值(如果看到相同的值两次,则抛出异常),否则返回键列表的值。这样,我就不必每次都同时构造两个dict了。特德,反向查找,我可以创建我的听写作为正常的,只是调用通用的reversedict函数结束。

然而,乔恩在评论中提到的Bidict解决方案似乎是更好的解决方案。(我的reversedict函数似乎是他的bidict的~运算符)。


如果您想要O(log(n))时间来访问值,您将需要映射的表示和反向映射的表示。

否则,你能做的最好的就是在一个方向上O(log(n)),在另一个方向上O(n))。

编辑:不是O(日志(n)),谢谢Claudiu,但是您仍然需要两个数据结构来实现快速访问时间。这个空间或多或少与dict和reverse dict的空间相同。