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.

Nawaz
fuente
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 :

glglgl
fuente
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
vencióme
48

Con otro constructor, tienes

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
Kiriloff
fuente
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
Stefano Sanfilippo
fuente
13
{x:a[x] for x in range(len(a))}
Emilio M Bumachar
fuente
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
Shahrukh Khan
fuente