An die Python Programmierer: Frage zu Dictionnary und enumerate?
def dicEnu(liste):
dic = dict() // hier erstelle ich ein dictionnary das leer ist
for c, value in enumerate(liste):
dic[value] = i
Wie wird hier genau das dictionnary befüllt, weil es ist ja leer und dann sage ich dic[value], aber das ist doch gar kein value drin der indiziert werden könnte oder wird durch diesen ausdruck dic[value] = i einerseits der value (z.B. string) gespeichert und dann mit i zu diesem spezifischen string eine Zahl? Oder wie funktioniert das hier?
2 Antworten
enumeriert 'dekoriert' die Einträge eines iterable mit dem Index. Eine aus meiner Sicht bessere Formulierung wäre gewesen:
for i,v in enumerate(liste):
Das zunächst leer instanziierte Dictionary wird dann mit den Einträgen der Liste so befüllt, daß der Eintrag der Schlüssel und sein Index der Wert ist. Wozu auch immer.
Man könnte das auch so machen:
def dicEnu(liste):
return dict((v,i) for i,v in enumerate(liste))
Hier zur Demonstration:
>>> liste
[3, 6, 1, 2, 6, 0]
>>> dict((v,i) for i,v in enumerate(liste))
{3: 0, 6: 4, 1: 2, 2: 3, 0: 5}
Wobei das Ergebnis ein wenig anders ist als bei der gezeigten Variante, wenn ein item in der Liste mehrfach vorkommen sollte.
Da wird bei der Zuweisung, wenn noch kein Eintrag vorhanden ist, ein neuer für diesen Key angelegt.
Da steht dann ein Eintrag im Dictionary, für den Key (hier value) und in diesem Eintrag wird diesem Key ein Wert (hier i) zugeordnet.