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.


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 :


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)

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.