2012-05-16 13 views
5

El problema es una lista de números de habitación y detalles de invitado que arranqué directamente de un archivo txt que debe colocarse en un diccionario con el número de habitación como las claves y los detalles como los valores.¿Cómo ordeno un diccionario?

La lista de invitados es literalmente una lista, cada elemento representa el número de habitación, el nombre del huésped, la llegada, las fechas de salida. Las habitaciones sin nada a su lado están vacías.

nlist = [['101'], ['102'], ['103'], 
['201', ' John Cleese', ' 5/5/12', ' 5/7/12'], ['202'], 
['203', ' Eric Idle', ' 7/5/12', ' 8/7/12'], ['301'], ['302'], ['303']] 

Básicamente, tengo que conseguir eso en un diccionario. Esto es lo que he intentado:

guests = {} 
for i in nlist: 
     if len(i) == 1: 
      key = i[0] 
      guests[key] = None 
     else: 
      key = i[0] 
      val = i[1],i[2],i[3] 
      guests[key] = val 

que me da:

guests = {'201': (' John Cleese', ' 5/5/12', ' 5/7/12'), 
'203': (' Eric Idle', ' 7/5/12', ' 8/7/12'), '202': None, '301': None, 
'302': None, '303': None, '102': None, '103': None, '101': None} 

Como se puede ver el diccionario se junta en ningún orden en particular. Sin embargo, para este ejercicio en particular, el diccionario debe estar en orden desde el número de habitación más bajo al más alto. Creo que pensé que simplemente iteraría a través de cada lista interna de principio a fin, lo probaría, y simplemente construiría el diccionario en ese orden.

¿Alguien sabe cómo escribir el código correctamente para que el diccionario salga como {'101': Ninguno, '102', Ninguno, '103': Ninguno ... etc.)? Y con suerte, alguien podría explicar por qué mi código no funcionó como yo también quería.

+3

Las entradas de diccionario se almacenan como hash y, por naturaleza, no están ordenadas. ¿Su tarea requiere que use un diccionario? ¿Por qué los necesitas ordenados? –

+0

posible duplicado de [Pedidos de elementos en el diccionario Python] (http://stackoverflow.com/questions/3127945/items-ordering-in-python-dictionary) – geoffspear

+1

Lo siento muchachos, mi título es un poco engañoso, ¿no? Estaba más interesado en por qué el dict se involucra de esa manera en particular. Lo que he recogido de todas sus respuestas es que 'simplemente es' jajaja sí, requiere un diccionario, pero podría salirme con uno desordenado si uso el código de aix debajo de – bang

Respuesta

10

Los diccionarios estándar de Python están inherentemente desordenados.

Una posibilidad es usar OrderedDict. Conservará el pedido de inserción , lo que significa que debe insertar entradas en el orden en el que desea recuperarlas.

Otra posibilidad es mantener el dict como está, pero recorrer en el orden deseado:

for k, v in sorted(guests.items()): 
    print k, v 

Por último, cabe señalar que sus números de habitación de ejemplo almacena en forma de cadenas en lugar de números enteros. Esto significa que el orden es lexicográfico ('90' > '100'). Como esto es tarea, lo dejo como ejercicio para la lectura para descubrir cómo solucionarlo.

+1

Buena edición. Es posible (ya que esto es tarea) que OP solo puede usar ciertos tipos de datos. –

+0

Es importante señalar que el orden de OrderedDict se basa en el orden de inserción, en lugar de la clave (número de habitación), por lo que dependiendo del archivo de texto de entrada, puede no ser adecuado. – hexparrot

+0

Tenga en cuenta que los números de las habitaciones son en realidad cadenas y el género es lexicográfico. Si los números más pequeños se escriben como ''5'' y no' '005'', no funcionarán. Si este puede ser el caso, una opción es convertirlos en enteros. – pepr

Cuestiones relacionadas