One liner: création d'un dictionnaire à partir d'une liste avec des index comme clés

91

Je veux créer un dictionnaire à partir d'une liste donnée, en une seule ligne . Les clés du dictionnaire seront des indices et les valeurs seront les éléments de la liste. Quelque chose comme ça:

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

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

print(d)

Production:

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

Je n'ai pas d'exigences spécifiques quant aux raisons pour lesquelles je veux une ligne. J'explore juste Python et je me demande si c'est possible.

Nawaz
la source
3
Quel avantage pensez-vous gagner en ayant ce dictionnaire? Les recherches d'index ne seront pas plus rapides avec un dictionnaire.
Martijn Pieters
@MartijnPieters: Eh bien, je pourrais avoir besoin, par exemple, ceci: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz
3
puis il suffit d' utiliser zip(): dict(zip(x, a)).
Martijn Pieters

Réponses:

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

produira

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

enumerate(sequence, start=0)

Renvoie un objet énumération. séquence doit être une séquence, un itérateur ou un autre objet prenant en charge l'itération. La next()méthode de l'itérateur retourné par enumerate()renvoie un tuplecontenant un décompte (de start qui vaut par défaut 0) et les valeurs obtenues en itérant sur la séquence :

glglgl
la source
2
@jamylak Mais pas besoin de supprimer le vôtre. Les gens auraient pu en savoir plus sur count()...
glglgl
@glglgl Il devrait y avoir une façon de le faire;)
jamylak
beat me by 2 minuts :)
jcr
48

Avec un autre constructeur, vous avez

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
Kiriloff
la source
7
@StefanoSanfilippo Dict et les compréhensions d'ensemble ont été rétroportés vers Python 2.7.
kevingessner
Je me suis trompé. N'oubliez pas que cela ne s'applique pas aux versions précédentes de Python 2.
Stefano Sanfilippo
14

Essayez enumerate: il retournera une liste (ou un itérateur) de tuples (i, a[i]), à partir de laquelle vous pouvez construire un dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b
Stefano Sanfilippo
la source
13
{x:a[x] for x in range(len(a))}
Emilio M Bumachar
la source
3

Utilisez simplement la compréhension de liste.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Shahrukh khan
la source