给出一对一的字典(=双射)生成
for key, value in someGenerator:
myDict[key] = value
通过添加
可以简单地创建反向查找字典 invDict[value] = key
到for
循环。但这是一种Pythonic方式吗?我是否应该编写一个class Bijection(dict)
来管理这个倒置字典并提供第二个查找功能?或者这样的结构(或类似结构)是否已经存在?
答案 0 :(得分:5)
我过去所做的是创建一个reversedict
函数,该函数将接受一个dict并返回相反的映射,如果我知道它是一对一的话,要么键值(抛出异常)两次看到相同的值),或者如果没有,则看到键列表的值。这样,每次我想要反向查找时,不必同时构造两个dicts,我可以正常创建我的dicts,并在最后调用泛型reversedict
函数。
然而,似乎Jon在评论中提到的bidict解决方案可能是更好的解决方案。 (我的reversedict
函数似乎是他的箴言~
运算符。
答案 1 :(得分:0)
如果你想要O(log(n))时间来访问值,你将需要地图的表示和逆映射的表示。
否则你能做的最好的是一个方向上的O(log(n))和另一个方向上的O(n)。
编辑:不是O(log(n)),感谢Claudiu,但您仍然需要两个数据结构来实现快速访问时间。这将与字典和反向字典大致相同。