Ho una lista di valori e voglio metterli in un dizionario che mapperebbe ogni valore al suo indice.modo pythonic per associare elementi di lista ai loro indici
posso farlo in questo modo:
>>> t = (5,6,7)
>>> d = dict(zip(t, range(len(t))))
>>> d
{5: 0, 6: 1, 7: 2}
questo non è male, ma sto cercando qualcosa di più elegante.
ho incontrato il seguente, ma lo fa il contrario di quello che mi serve:
>>> d = dict(enumerate(t))
>>> d
{0: 5, 1: 6, 2: 7}
si prega di condividere le vostre soluzioni,
Grazie
EDIT: Python 2.6.4
Per gli elenchi contenenti 1000 elementi la versione dict (zip) è la più veloce, il generatore e le versioni di list comprehension sono praticamente identici e sono ~ 1.5 tempi più lenti e la mappa funzionale (invertita) è notevolmente più lenta.
$ python -mtimeit -s "t = gamma (int (1e3))" "d = dict (zip (t, range (len (t))))"
1000 cicli, meglio di 3: 277 usec per loop
$ pitone -mtimeit -s "t = intervallo (int (1e3))" "d = dict ([(y, x) per x, y in enumerate (t)])"
1000 loop, meglio di 3: 426 usec per loop
$ python -mtimeit -s "t = intervallo (int (1e3))" "d = dict ((y, x) per x, y in enumerate (t)) "
1000 loop, meglio di 3: 437 usec per loop
$ python -mtimeit -s "t = gamma (int (1e3))" "d = dict (mappa (invertita, enumerare (t)))"
100 cicli, meglio di 3: 3.66 msec per loop
Ho provato a eseguire gli stessi test per elenchi più lunghi e più brevi (1e2, 1e4, 1e5) e il tempo per ciclo si riduce linearmente con la lunghezza dell'elenco.
Qualcuno potrebbe conoscere la versione 2.7+?
Sono curioso - quale delle implementazioni è più veloce? A proposito, Chewy, quale versione di Python stai usando? –