2010-09-22 8 views
41

¿Es posible usar cadenas como índices en una matriz en python?Arreglo de Python con índices de cadena

Por ejemplo:

myArray = [] 
myArray["john"] = "johns value" 
myArray["jeff"] = "jeffs value" 
print myArray["john"] 
+6

lo que está mostrando son __lists__, no matrices. Llámame pedante. – aaronasterling

Respuesta

89

Lo que se quiere que se llama un associative array. En Python estos se llaman dictionaries.

Los diccionarios a veces se encuentran en otros idiomas como "memorias asociativas" o "matrices asociativas". A diferencia de las secuencias, que están indexadas por un rango de números, los diccionarios están indexados por claves, que pueden ser de cualquier tipo inmutable; las cadenas y los números siempre pueden ser claves.

myDict = {} 
myDict["john"] = "johns value" 
myDict["jeff"] = "jeffs value" 

manera alternativa de crear el dict arriba:

myDict = {"john": "johns value", "jeff": "jeffs value"} 

valores de Acceso:

print myDict["jeff"] # => "jeffs value" 

recibir las llaves (en Python v2):

print myDict.keys() # => ["john", "jeff"] 

Si quiere aprender acerca de las partes internas del diccionario de python, le recomiendo esta presentación de video de ~ 25 min: https://www.youtube.com/watch?v=C4Kc8xzcA68. Se llama "The Mighty Dictionary".

+4

Gran ejemplo. Algo que siempre es bueno saber sobre Diccionarios en Python es que, como [The MYYN] (http://stackoverflow.com/users/89391/the-myyn) dijo, la clave debe ser de un tipo inmutable. Si alguna vez necesita categorizar valores con "múltiples" claves, debe usar el tipo Tuple en Python. – Sean

+1

Técnicamente, la clave [tiene que ser _hashable_] (http://docs.python.org/reference/datamodel.html#object.__hash__), no necesariamente inmutables, aunque el valor devuelto por la función 'hash' no debería cambiar como siempre que el objeto se use como una clave de diccionario. Si es así, prepárese para que su programa falle o se porte mal de maneras extrañas. –

+0

La URL de Above The Mighty Dictionary no funciona, en https://www.youtube.com/watch?v=C4Kc8xzcA68 –

4

Mejor aún, intente con OrderedDict (suponiendo que quiere algo así como una lista). Más cerca de una lista que un dict regular ya que las claves tienen un orden al igual que los elementos de la lista tienen un orden. Con un dict regular, las claves tienen un orden arbitrario.

Tenga en cuenta que esto está disponible en Python 3 y 2.7. Si desea utilizar una versión anterior de Python, puede encontrar módulos instalables para hacerlo.

+0

Tenga en cuenta que la necesidad de un OrderedDict es mucho menos común que la necesidad de un dict. –

Cuestiones relacionadas