Una línea: crear un diccionario a partir de una lista con índices como claves


91

Quiero crear un diccionario a partir de una lista determinada, en una sola línea . Las claves del diccionario serán índices y los valores serán los elementos de la lista. Algo como esto:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

Salida:

{0:51, 1:27, 2:13, 3:56}

No tengo requisitos específicos sobre por qué quiero una línea. Solo estoy explorando Python y me pregunto si eso es posible.


3
¿Qué ventaja crees que obtendrás al tener este diccionario? Las búsquedas de índices no serán más rápidas con un diccionario.
Martijn Pieters

@MartijnPieters: Bueno, puede ser que necesite, por ejemplo, esto: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz

3
a continuación, sólo tiene que utilizar zip(): dict(zip(x, a)).
Martijn Pieters

Respuestas:


158
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

Producirá

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

Devuelve un objeto enumerado. La secuencia debe ser una secuencia, un iterador o algún otro objeto que admita la iteración. El next()método del iterador devuelto por enumerate()devuelve que tuplecontiene un recuento (desde el inicio, que por defecto es 0) y los valores obtenidos al iterar sobre la secuencia :


2
@jamylak Pero no es necesario que elimines el tuyo. La gente podría haber aprendido sobre count()...
glglgl

@glglgl Debería haber una forma de hacerlo;)
jamylak


48

Con otro constructor, tienes

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dict y las comprensiones de conjuntos se exportaron a Python 2.7.
kevingessner

Me quedo corregido. Aún así, recuerde que esto no se aplica a las versiones anteriores de Python 2.
Stefano Sanfilippo

14

Pruebe enumerate: devolverá una lista (o iterador) de tuplas (i, a[i]), a partir de la cual puede construir un dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b


3

Simplemente use la comprensión de listas.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.