Errore di creazione del dizionario Python
-
06-07-2019 - |
Domanda
Sto cercando di creare un dizionario Python da un elenco memorizzato. Questo primo metodo funziona
>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])
Tuttavia, il seguente metodo non funziona
>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required
Quindi mi chiedo perché il primo metodo che utilizza append funziona ma il secondo metodo non funziona? C'è una differenza tra myList
e myList2
?
Modifica
Ricontrollato myList2
in realtà ha più di due elementi. Secondo esempio aggiornato per riflettere questo.
Soluzione
Stai sbagliando.
Il costruttore dict ()
non prende un elenco di elementi (tanto meno un elenco che contiene un singolo elenco di elementi), prende un iterabile di iterabili a 2 elementi. Quindi se hai modificato il codice in:
myList = []
myList.append(["mykey1", "myvalue1"])
myList.append(["mykey2", "myvalue2"])
myDict = dict(myList)
Quindi otterrai ciò che ti aspetti:
>>> myDict
{'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}
Il motivo per cui funziona:
myDict = dict([['prop1', 'prop2']])
{'prop1': 'prop2'}
È perché lo sta interpretando come un elenco che contiene un elemento che è un elenco che contiene due elementi.
In sostanza, il costruttore dict
prende il suo primo argomento ed esegue un codice simile a questo:
for key, value in myList:
print key, "=", value