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.


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 :


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)

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.