Asignaciones inyectivas bidireccionales [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Mapa bidireccional / inverso 13 respuestas

A menudo trato con mapeos que soninyectiva. En la terminología de programación, esto puede expresarse como un diccionario donde todos los valores son únicos y, por supuesto, todas las claves.

¿Existe una estructura de datos eficiente en la memoria para las asignaciones inyectivas con todas las propiedades de complejidad temporal que espera de los diccionarios?

Por ejemplo:

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

d.get(2) = 'b'  # this works with a normal dictionary
d.get('b', reverse=True) = 2  # but this is not possible

Todas las soluciones enMapa bidireccional / inverso parece requerir el uso o la combinación de dos conjuntos de asignaciones, centrándose en facilitar la realización de operaciones en un mapa bidireccional. Esto está bien para diccionarios pequeños que se ajustan perfectamente en la memoria, pero no es bueno para diccionarios grandes.

El requisito es que no debería haber una sobrecarga de memoria adicional que almacene el mapa bidireccional inyectivo versus un diccionario normal que almacene solo asignaciones unidireccionales.

Entiendo que los diccionarios usan una tabla hash, que usa un tipo de datos de matriz asociativa. Por definición, las matrices asociativas implementan asignaciones de clave -> valor con claves únicas. ¿Es posible, teóricamente o en la práctica, producir un mapeo inyectivo inteligente que permita la búsqueda inversa?

Si esto esno posible, agradecería una explicación de por qué tal construcción es difícil o imposible de implementar con la misma eficiencia que los diccionarios.

Actualizar

Después de la discusión con @rpy (vea los comentarios a continuación), cualquier información sobre cómo configurar un objeto similar a un diccionario de Python usando una función hash reversible perfecta sería útil. Pero, por supuesto, una implementación funcional sería ideal (ya lo he intentadoperfección)

Respuestas a la pregunta(1)

Su respuesta a la pregunta