2011-07-05 12 views
8

Al usar Python, ¿es posible que un dict tenga un valor que sea una lista?Python: ¿puede un dict tener un valor que sea una lista?

por ejemplo, un diccionario que se vería como la siguiente (ver los valores de KeyName3):

{ 
keyName1 : value1, 
keyName2: value2, 
keyName3: {val1, val2, val3} 
} 

ya sé que puedo usar 'defaultdict', sin embargo los valores individuales están (comprensiblemente) volvió como una lista.

La razón que pido es que mi código debe ser genérica para que la persona que llama puede retieve valores de las claves individuales como un elemento (al igual que de un dict clave-valor) y no como lista (sin tener que especificar pop[0] la lista) - Sin embargo, también recupera múltiples valores como una lista.

Si no, entonces cualquier suugestions serían bien recibidos.

Si alguien puede ayudar a continuación, que sería grande.

Gracias de antemano,

Paul

* Estoy usando Python 2.6 embargo escribir guiones que también debe ser compatible con versiones de Python 3.0 o superior.

+0

Lea aquí para obtener más información: http://docs.python.org/tutorial/datastructures.html#dictionaries y tenga en cuenta si es nuevo en Python - tutorial es usted el mejor amigo –

+2

Para probar cosas simples como esta, solo use la modo interactivo de pitón. Puedes experimentar y encontrar lo que está permitido y lo que no. – tkerwin

+0

@Paul Kernaghan: Cuando lo intentaste, ¿qué observaste? –

Respuesta

24

Sí. Los valores en un dict pueden ser cualquier tipo de objeto python. Las claves pueden ser cualquier objeto hashable (que no permite una lista, pero permite una tupla).

Es necesario utilizar [], no {} para crear una lista:

{ keyName1 : value1, keyName2: value2, keyName3: [val1, val2, val3] } 
+0

Doh! Eso funcionó perfectamente. Gracias por su ayuda y muy apreciada. –

+0

La razón por la que uno puede usar una tupla pero no una lista es porque las listas son mutables, por lo que cualquier cálculo basado en su "valor" no sería idempotente (sentido de la computación). – Marcin

+0

@geoffspear, Cool, pero ¿cómo obtener valor por keyname3 y list value 2? – Eswemenasja

5

sí, es posible:

d = {} 
d["list key"] = [1,2,3] 
print d 

de salida:

{'list key': [1, 2, 3]} 
0

que sin duda puede tener una lista y cualquier objeto como valor pero el diccionario no puede tener una lista como clave porque la lista es una estructura de datos mutable y las claves no pueden ser mutables sino de qué sirven.

Cuestiones relacionadas