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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top