2011-05-08 15 views
9

Estoy tratando de convertir una lista a un diccionario utilizando la función dict.Algunos problemas con la función dict

inpu = input.split(",") 
dic = dict(inpu) 

El código anterior es tratar de obtener una cadena y split en ',' y después utilizo la función dict para convertir la lista en un diccionario.

Sin embargo, me sale este error:

ValueError: dictionary update sequence element #0 has length 6; 2 is required

¿Alguien puede ayudar?

+0

nos dan una ejemplo de su aporte, y explique lo que espera que suceda. – NPE

+0

Es posible que desee utilizar 'set' en lugar de' dict'. –

Respuesta

17

dict espera un iterable de contenedores de 2 elementos (como una lista de tuplas). No se puede simplemente pasar una lista de elementos, no se sabe qué es una clave y qué valor tiene.

usted está tratando de hacer esto:

>>> range(10) 
<<< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> dict(range(10)) 
--------------------------------------------------------------------------- 
TypeError: cannot convert dictionary update sequence element #0 to a sequence 

dict espera una lista como esta:

>>> zip(lowercase[:5], range(5)) 
<<< 
[('a', 0), 
('b', 1), 
('c', 2), 
('d', 3), 
('e', 4)] 

El primer elemento de la tupla se convierte en la clave, el segundo se convierte en el valor.

>>> dict(zip(lowercase[:5], range(5))) 
<<< 
{'a': 0, 
'b': 1, 
'c': 2, 
'd': 3, 
'e': 4} 
0

Un diccionario es un par clave-valor por lo que dice que se necesitan listas de longitud 2 para hacer coincidir las claves con los valores. Está dividiendo la entrada en una lista plana, razón por la cual Python se queja en este caso: no sabe qué especificar como claves y qué especificar como valores.

2

Según figura en Python Data structures Docs. El constructor dict() construye diccionarios directamente a partir de listas de pares clave-valor almacenados como tuplas.

por lo que el conjunto inpu debe ser de la forma ('llave', 'valor') en cada posición, por ejemplo

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) 
{'sape': 4139, 'jack': 4098, 'guido': 4127} 

su matriz de entrada es probablemente mayor que 2 en tamaño

Cuestiones relacionadas