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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top