¿Cómo implementar una matriz asociativa (no diccionario) en Python?

Intento imprimir un diccionario en Python:

Dictionary = {"Forename":"Paul","Surname":"Dinh"} for Key,Value in Dictionary.iteritems(): print Key,"=",Value 

Aunque el elemento “Nombre” aparece primero en la lista, pero los diccionarios en Python parecen estar ordenados por valores, por lo que el resultado es el siguiente:

 Surname = Dinh Forename = Paul 

¿Cómo imprimirlos con el mismo orden en el código o en el orden cuando se agregan elementos (no ordenados por valores ni por claves)?

Puede utilizar una lista de tuplas (o lista de listas). Me gusta esto:

 Arr= [("Forename","Paul"),("Surname","Dinh")] for Key,Value in Arr: print Key,"=",Value Forename = Paul Surname = Dinh 

Puedes hacer un diccionario con esto:

 Dictionary=dict(Arr) 

Y las claves correctamente ordenadas como esta:

 keys = [k for k,v in Arr] 

Entonces haz esto:

 for k in keys: print k,Dictionary[k] 

pero estoy de acuerdo con los comentarios sobre su pregunta: ¿No sería fácil ordenar las claves en el orden requerido cuando se realiza el bucle?

EDIT: (gracias Rik Poggi), OrderedDict lo hace por usted:

 od=collections.OrderedDict(Arr) for k in od: print k,od[k] 

En primer lugar, los diccionarios no están ordenados en absoluto ni por clave, ni por valor.

Y basándote en tu descripción. Usted realmente necesita colecciones.OrderedDict módulo

 from collections import OrderedDict my_dict = OrderedDict([("Forename", "Paul"), ("Surname", "Dinh")]) for key, value in my_dict.iteritems(): print '%s = %s' % (key, value) 

Tenga en cuenta que debe crear OrderedDict instancia de OrderedDict de una lista de tuplas que no sea de otro dictado, ya que la instancia de dict modificará el orden de los elementos antes de que se cree una instancia de OrderedDict.

Puedes usar collections.OrderedDict . Está disponible en python2.7 y python3.2 +.

Esto puede satisfacer su necesidad mejor:

 Dictionary = {"Forename":"Paul","Surname":"Dinh"} KeyList = ["Forename", "Surname"] for Key in KeyList: print Key,"=",Dictionary[Key] 

‘pero los diccionarios en Python están ordenados por valores’ tal vez me equivoque aquí, pero ¿qué te parece eso? Los diccionarios no están ordenados por nada.

Tendría dos soluciones, mantener una lista de claves adicionales al diccionario o usar una estructura de datos diferente, como una matriz o matrices.

Me pregunto si es un dictado ordenado que quieres:

 >>> k = "one two three four five".strip().split() >>> v = "abcde".strip().split() >>> k ['one', 'two', 'three', 'four', 'five'] >>> v ['a', 'b', 'c', 'd', 'e'] >>> dx = dict(zip(k, v)) >>> dx {'four': 'd', 'three': 'c', 'five': 'e', 'two': 'b', 'one': 'a'} >>> for itm in dx: print(itm) four three five two one >>> # instantiate this data structure from OrderedDict class in the Collections module >>> from Collections import OrderedDict >>> dx = OrderedDict(zip(k, v)) >>> for itm in dx: print(itm) one two three four five 

Un diccionario creado con OrderDDict conserva el orden de inserción original .

Dicho de otra manera, dicho diccionario recorre los pares clave / valor de acuerdo con el orden en que se insertaron.

Entonces, por ejemplo, cuando elimina una clave y luego vuelve a agregar la misma clave, el orden de iteración cambia:

 >>> del dx['two'] >>> for itm in dx: print(itm) one three four five >>> dx['two'] = 'b' >>> for itm in dx: print(itm) one three four five two