是否有更好的方法来存储双向字典而不是存储它的反向分离?

时间:2013-05-28 13:36:51

标签: python dictionary

给出一对一的字典(=双射)生成

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

通过添加

可以简单地创建反向查找字典
    invDict[value] = key

for循环。但这是一种Pythonic方式吗?我是否应该编写一个class Bijection(dict)来管理这个倒置字典并提供第二个查找功能?或者这样的结构(或类似结构)是否已经存在?

2 个答案:

答案 0 :(得分:5)

我过去所做的是创建一个reversedict函数,该函数将接受一个dict并返回相反的映射,如果我知道它是一对一的话,要么键值(抛出异常)两次看到相同的值),或者如果没有,则看到键列表的值。这样,每次我想要反向查找时,不必同时构造两个dicts,我可以正常创建我的dicts,并在最后调用泛型reversedict函数。

然而,似乎Jon在评论中提到的bidict解决方案可能是更好的解决方案。 (我的reversedict函数似乎是他的箴言~运算符。

答案 1 :(得分:0)

如果你想要O(log(n))时间来访问值,你将需要地图的表示和逆映射的表示。

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

编辑:不是O(log(n)),感谢Claudiu,但您仍然需要两个数据结构来实现快速访问时间。这将与字典和反向字典大致相同。