Ho un problema che richiede una mappatura 1: 1 reversibile delle chiavi ai valori.Una struttura dati per i mapping 1: 1 in python?
Ciò significa che a volte desidero trovare il valore fornito da una chiave, ma in altri casi desidero trovare la chiave in base al valore. Sia le chiavi che i valori sono garantiti come unici.
x = D[y]
y == D.inverse[x]
La soluzione più ovvia è quella di invertire semplicemente il dizionario ogni volta che voglio una ricerca inversa: Inversione di un dizionario è molto semplice, there's a recipe here but for a large dictionary it can be very slow.
L'altra alternativa è creare una nuova classe che unisca due dizionari, uno per ogni tipo di ricerca. Molto probabilmente sarebbe veloce, ma consumerebbe il doppio della memoria di un singolo dettato.
Quindi c'è una struttura migliore che posso usare?
- La mia applicazione richiede che questo dovrebbe essere molto veloce e utilizzare il minimo di memoria possibile.
- La struttura deve essere modificabile ed è fortemente auspicabile che la mutazione dell'oggetto non causi più rallentamento (ad es. Forzare un reindicizzazione completo)
- Possiamo garantire che la chiave o il valore (o entrambi) sarà un numero intero
- È probabile che la struttura sarà necessaria per memorizzare migliaia o forse milioni di elementi.
- Keys & Valus sono garantiti per essere unico, cioè len (set (x)) == len (x) per for x in [d.keys(), D.valuies()]
Quanto è grande questo dizionario? Sei sicuro che due copie non si adattino alla memoria? –