我有一个问题,需要一个可逆的键到值的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的两倍
那么有没有更好的结构我可以使用?
不完全是这样,因为它们只会保存对同一数据的两个引用。在我看来,这不是一个糟糕的解决方案。
你考虑过内存中的数据库查找吗?我不确定它在速度上如何比较,但是在关系数据库中查找可以非常快。
不是真的。你量过了吗?由于两个词典都将对相同对象的引用用作键和值,因此所用的内存将只是词典结构。这比两次要少得多,而且无论数据大小如何,它都是固定的弹药。
我的意思是实际数据不会被复制。所以你不会花多少额外的记忆。
示例:
只有一个“真的很大”字符串的副本存在,所以你最终只需要多花一点内存。一般来说是可以负担得起的。
我无法想象一个解决方案,如果您不花费至少足够的内存来存储反向查找哈希表(这正是您的“unite two
dict
解决方案中所做的),那么在按值查找时,您将拥有密钥查找速度。相关问题 更多 >
编程相关推荐