给定生成的一对一字典(=bijection)
for key, value in someGenerator:
myDict[key] = value可以通过添加以下内容轻松创建反向查找字典
invDict[value] = key添加到for循环。但这是一种Pythonic式的方式吗?我是否应该另外编写一个class Bijection(dict)来管理这个倒排字典,并提供第二个查找函数?或者这样的结构(或类似的结构)已经存在?
发布于 2013-05-28 21:46:14
我过去所做的就是创建一个reversedict函数,它将接受一个字典并返回相反的映射,如果我知道它是一对一的(如果看到相同的值两次就会抛出异常),我就会返回一个相反的映射,或者如果不是这样,我就可以正常地创建我的字典,并在最后调用通用的reversedict函数,而不是每次我想要反向查找时都同时构造两个字典。
然而,似乎Jon在评论中提到的bidict解决方案可能是更好的解决方案。(我的reversedict函数似乎是他的bidict的~操作符)。
发布于 2013-05-28 21:56:45
如果需要O(log(n))时间来访问值,则需要映射的表示和逆映射的表示。
否则,您最多只能在一个方向上使用O(log(n)),在另一个方向上使用O(n)。
编辑:log不是O((N)),谢谢克劳迪奥,但你仍然需要两个数据结构来实现快速访问时间。这与dict和inverse dict的空间大致相同。
https://stackoverflow.com/questions/16793526
复制相似问题