Tengo una lista de valores y quiero ponerlos en un diccionario que asignaría cada valor a su índice.manera pitonica de asociar elementos de lista con sus índices
que pueda hacer de esta manera:
>>> t = (5,6,7)
>>> d = dict(zip(t, range(len(t))))
>>> d
{5: 0, 6: 1, 7: 2}
esto no es malo, pero estoy buscando algo más elegante.
que he encontrado lo siguiente, pero hace lo contrario de lo que necesito:
>>> d = dict(enumerate(t))
>>> d
{0: 5, 1: 6, 2: 7}
Por favor comparta sus soluciones,
Gracias
EDITAR: Python 2.6.4
Para las listas que contienen 1000 elementos, la versión dict (zip) es la más rápida, el generador y la lista de versiones de comprensión son prácticamente idénticos y son ~ 1.5 tiempos más lentos y el mapa funcional (invertido) es considerablemente más lento.
$ pitón -mtimeit -s "t = rango (int (1E3))" "d = dict (zip (t, gama (len (t))))"
1.000 bucles, mejor de 3: 277 usec por lazo
$ pitón -mtimeit -s "t = rango (int (1E3))" "d = dict ([(y, x) para x, y en enumerate (t)])"
1000 loops, mejor de 3: 426 usec por ciclo
$ python -mtimeit -s "t = rango (int (1e3))" "d = dict ((y, x) para x, y en enumerar (t)) "
1000 bucles, mejor de 3: 437 usec por bucle
$ pitón -mtimeit -s "t = rango (int (1E3))" "(mapa (invertido, enumerar (t))) d = dict"
100 bucles, mejor de 3: 3,66 mseg por bucle
Intenté ejecutar las mismas pruebas para las listas más largas y más cortas (1e2, 1e4, 1e5) y el tiempo por ciclo escala linealmente con la longitud de la lista.
¿Podría alguien tiempo py versión 2.7+?
Tengo curiosidad: ¿cuál de las implementaciones es más rápida? Por cierto, Chewy, ¿qué versión de Python estás usando? –