Python-Wörterbuch Erstellungsfehler
-
06-07-2019 - |
Frage
Ich versuche, einen Python-Wörterbuch aus einer gespeicherten Liste zu erstellen. Diese erste Methode funktioniert
>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])
Allerdings ist die folgende Methode nicht funktioniert
>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required
Also ich frage mich, warum die erste Methode funktioniert mit hängen, aber die zweite Methode funktioniert nicht? Gibt es einen Unterschied zwischen myList
und myList2
?
Bearbeiten
erneut geprüft myList2
hat tatsächlich mehr als zwei Elemente. Aktualisierte zweites Beispiel, dies zu reflektieren.
Lösung
Sie tun es falsch.
Der dict()
Konstruktor nimmt nicht eine Liste von Elementen (viel weniger eine Liste eine einzige Liste der Elemente enthält), dauert es eine iterable 2-Element Iterables. Also, wenn Sie Ihren Code geändert werden:
myList = []
myList.append(["mykey1", "myvalue1"])
myList.append(["mykey2", "myvalue2"])
myDict = dict(myList)
Dann würden Sie bekommen, was Sie erwarten:
>>> myDict
{'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}
Der Grund, dass dies funktioniert:
myDict = dict([['prop1', 'prop2']])
{'prop1': 'prop2'}
Ist, weil es sie als eine Liste zu interpretieren, die ein Element enthält, das eine Liste ist, die zwei Elemente enthalten.
Im Wesentlichen der dict
Konstruktor nimmt ihr erstes Argument und führt einen Code ähnlich wie folgt aus:
for key, value in myList:
print key, "=", value