2016-04-06 15 views
14

ich die folgende Liste zu konvertieren Ich versuche:Python: Konvertieren Liste mit Indizes Zum Wörterbuch

list = ['A','B','C'] 

Um ein Wörterbuch wie:

dict = {'A':0, 'B':1, 'C':2} 

Ich habe versucht, Antworten von anderen Beiträgen keine, die funktioniert für mich. Ich habe den folgenden Code für jetzt:

{list[i]: i for i in range(len(list))} 

Welche mir diesen Fehler gibt:

unhashable type: 'list' 

Jede Hilfe ist sehr geschätzt. Vielen Dank.

+0

Ihr Code funktioniert für mich. – Daniel

+1

1. Verwenden Sie 'list' nicht als Variablennamen. 2. Verwenden Sie' enumerate' wie gezeigt. {J: i für i, j in enumerate (l)} ' –

+1

Sie haben einen Fehler im Code, den Sie uns nicht gezeigt haben . Die Elemente von 'list' sind wahrscheinlich Listen, obwohl Sie andere Fehler gemacht haben könnten, wie das Schreiben von' list: i' anstelle von 'list [i]: i'. – user2357112

Antwort

28

Sie können die Indizes einer Liste von der integrierten enumerate erhalten. Sie müssen nur den Indexwert Karte umkehren und ein Wörterbuch Verständnis verwenden, um ein Wörterbuch zu erstellen

>>> lst = ['A','B','C'] 
>>> {k: v for v, k in enumerate(lst)} 
{'A': 0, 'C': 2, 'B': 1} 

Ohh, und nie eine Variable auf einen integrierten oder einen Typ zu nennen.

0

Verwenden Sie nicht list als Variablenname, da es von Python reserviert ist. Sie können auch enumerate nutzen.

your_list = ['A', 'B', 'C'] 
dict = {key: i for i, key in enumerate(your_list)} 
+1

Warum benutzen Sie das Element Ihrer For-Schleife nicht? – Daniel

+0

Weil Sie nicht müssen. Ich habe es immer noch geändert. –

+1

Ah ... immer großartig, um downvotes für Code, der funktioniert. –

0

Sie haben die unhashable Liste in ein Tupel konvertieren:

dct = {tuple(key): idx for idx, key in enumerate(lst)} 
1

Verwenden integrierten Funktionen DIKT und Zip:

>>> lst = ['A','B','C'] 
>>> dict(zip(lst,range(len(lst)))) 
2

Python dict Konstruktor hat eine Fähigkeit, die Liste zu konvertieren von tuple zu dict, mit Schlüssel als erstes Element von Tupel und Wert als zweites Element von Tupel. Um dies zu erreichen, können Sie die eingebaute Funktion enumerate verwenden, die tuple von (index, value) ergibt.

Die Anforderung der Frage ist jedoch genau das Gegenteil, d. H. tuple sollte (value, index) sein. Dies erfordert einen zusätzlichen Schritt, um die Tupelelemente vor dem Übergeben an dict-Konstruktor umzukehren. Für diesen Schritt können wir es verwenden, um jedes Element der Liste builtin reversed und gelten mit map

>>> lst = ['A', 'B', 'C'] 
>>> dict((map(reversed, enumerate(lst)))) 
>>> {'A': 0, 'C': 2, 'B': 1} 
Verwandte Themen