【发布时间】:2010-10-26 05:21:16
【问题描述】:
我有一个问题,需要将键与值进行可逆的 1:1 映射。
这意味着有时我想找到给定键的值,但有时我想找到给定值的键。键和值都保证是唯一的。
x = D[y]
y == D.inverse[x]
显而易见的解决方案是每次我想要反向查找时简单地反转字典:反转字典非常容易,there's a recipe here but for a large dictionary it can be very slow。
另一种选择是创建一个新类,它将两个字典联合起来,一个用于每种查找。这很可能会很快,但会消耗两倍于单个 dict 的内存。
那么我可以使用更好的结构吗?
- 我的应用程序要求它应该非常快并且使用尽可能少的内存。
- 结构必须是可变的,并且强烈希望改变对象不应该导致它变慢(例如强制完全重新索引)
- 我们可以保证键或值(或两者)都是整数
- 很可能需要该结构来存储数千甚至数百万个项目。
- 保证键和值是唯一的,即 len(set(x)) == len(x) for for x in [D.keys(), D.valueies()]
【问题讨论】:
-
这本词典有多大?您确定两份副本不适合内存吗?