Ein Liner: Erstellen eines Wörterbuchs aus einer Liste mit Indizes als Schlüssel

91

Ich möchte ein Wörterbuch aus einer bestimmten Liste in nur einer Zeile erstellen . Die Schlüssel des Wörterbuchs sind Indizes, und Werte sind die Elemente der Liste. Etwas wie das:

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

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

print(d)

Ausgabe:

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

Ich habe keine spezifischen Anforderungen, warum ich eine Zeile möchte . Ich erforsche nur Python und frage mich, ob das möglich ist.

Nawaz
quelle
3
Welchen Vorteil gewinnen Sie mit diesem Wörterbuch? Indexsuchen werden mit einem Wörterbuch nicht schneller.
Martijn Pieters
@MartijnPieters: Nun, ich könnte zum Beispiel Folgendes brauchen : {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz
3
dann benutze einfach zip(): dict(zip(x, a)).
Martijn Pieters

Antworten:

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

wird herstellen

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

enumerate(sequence, start=0)

Gibt ein Aufzählungsobjekt zurück. Die Sequenz muss eine Sequenz, ein Iterator oder ein anderes Objekt sein, das die Iteration unterstützt. Die von zurückgegebene next()Methode des Iterators enumerate()gibt a zurück, tupledas eine Zählung (von Anfang an standardmäßig 0) und die Werte enthält, die durch Iteration über die Sequenz erhalten wurden :

glglgl
quelle
2
@ Jamylak Aber keine Notwendigkeit, Ihre zu entfernen. Die Leute hätten lernen können count()...
glglgl
@glglgl Es sollte einen Weg geben, es zu tun;)
Jamylak
schlagen Sie mich um 2 Minuten :)
jcr
47

Mit einem anderen Konstruktor haben Sie

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)
kiriloff
quelle
7
@StefanoSanfilippo Dict- und Set-Verständnis wurden auf Python 2.7 zurückportiert.
Kevingessner
Ich stehe korrigiert. Beachten Sie jedoch, dass dies nicht für frühere Python 2-Versionen gilt.
Stefano Sanfilippo
14

Versuchen Sie enumerate: Es wird eine Liste (oder ein Iterator) von Tupeln zurückgegeben (i, a[i]), aus der Sie Folgendes erstellen können dict:

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

Verwenden Sie einfach das Listenverständnis.

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