Pregunta

Estoy intentando crear un diccionario de Python a partir de una lista almacenada. Este primer método funciona

>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])

Sin embargo, el siguiente método no funciona

>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required

¿Entonces me pregunto por qué el primer método que usa el apéndice funciona pero el segundo no funciona? ¿Hay alguna diferencia entre myList y myList2 ?

Editar

Revisado de nuevo myList2 en realidad tiene más de dos elementos. Se actualizó el segundo ejemplo para reflejar esto.

¿Fue útil?

Solución

Lo estás haciendo mal.

El constructor dict () no toma una lista de elementos (y mucho menos una lista que contiene una sola lista de artículos), toma una iterable de iterables de 2 elementos. Así que si cambiaste tu código para ser:

myList = []
myList.append(["mykey1", "myvalue1"])
myList.append(["mykey2", "myvalue2"])
myDict = dict(myList)

Entonces obtendrías lo que esperas:

>>> myDict
{'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}

La razón por la que esto funciona:

myDict = dict([['prop1', 'prop2']])
{'prop1': 'prop2'}

Es porque lo interpreta como una lista que contiene un elemento que es una lista que contiene dos elementos.

Esencialmente, el constructor dict toma su primer argumento y ejecuta un código similar a este:

for key, value in myList:
    print key, "=", value
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top