Tengo un problema que requiere un mapeo 1: 1 reversible de las claves de los valores.¿Una estructura de datos para mapeos 1: 1 en python?
Eso significa que a veces quiero encontrar el valor dado a una clave, pero en otras ocasiones quiero encontrar la clave dada el valor. Tanto las claves como los valores son únicos.
x = D[y]
y == D.inverse[x]
La solución obvia es simplemente invertir el diccionario cada vez que quiero una búsqueda inversa: La inversión de un diccionario es muy fácil, there's a recipe here but for a large dictionary it can be very slow.
La otra alternativa es crear una nueva clase que una dos diccionarios, uno para cada tipo de búsqueda. Eso probablemente sea rápido, pero usaría el doble de memoria que un solo dict.
¿Existe una mejor estructura que pueda usar?
- Mi aplicación requiere que esto sea muy rápido y utilice la menor cantidad de memoria posible.
- La estructura debe ser mutable, y es muy conveniente que la mutación del objeto no lo haga más lento (por ejemplo, forzar un re-índice completo)
- Podemos garantizar que la clave o el valor (o ambos)) será un número entero
- Es probable que la estructura sea necesaria para almacenar miles o posiblemente millones de elementos.
- Keys & Valus se garantiza que sea único, es decir, len (conjunto (x)) == len (x) para x en [d.keys(), D.valuies()]
¿Qué tan grande es este diccionario? ¿Estás seguro de que dos copias no caben en la memoria? –