首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方法来存储双向字典,而不是单独存储它的逆字典?

有没有更好的方法来存储双向字典,而不是单独存储它的逆字典?
EN

Stack Overflow用户
提问于 2013-05-28 21:36:51
回答 2查看 7.5K关注 0票数 13

给定生成的一对一字典(=bijection)

代码语言:javascript
复制
for key, value in someGenerator:
     myDict[key] = value

可以通过添加以下内容轻松创建反向查找字典

代码语言:javascript
复制
    invDict[value] = key

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-28 21:46:14

我过去所做的就是创建一个reversedict函数,它将接受一个字典并返回相反的映射,如果我知道它是一对一的(如果看到相同的值两次就会抛出异常),我就会返回一个相反的映射,或者如果不是这样,我就可以正常地创建我的字典,并在最后调用通用的reversedict函数,而不是每次我想要反向查找时都同时构造两个字典。

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

票数 6
EN

Stack Overflow用户

发布于 2013-05-28 21:56:45

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

否则,您最多只能在一个方向上使用O(log(n)),在另一个方向上使用O(n)。

编辑:log不是O((N)),谢谢克劳迪奥,但你仍然需要两个数据结构来实现快速访问时间。这与dict和inverse dict的空间大致相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16793526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档