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

2024-06-28 18:48:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

通过添加

    invDict[value] = key

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


Tags: keyin功能for字典value方式结构
2条回答

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

否则,最好的方法是一个方向O(log n),另一个方向O(n)。

编辑:不是O(log(n)),感谢Claudiu,但是您仍然需要两个数据结构来实现快速访问时间。这个空间和一个dict和一个inverse dict差不多

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

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

相关问题 更多 >