2012-05-16 14 views
5

Il problema è un elenco di numeri di stanze e dettagli del cliente che ho estratto direttamente da un file txt che deve essere inserito in un dizionario con il numero della stanza come chiavi e i dettagli come valori.Come si ordina un dizionario?

L'elenco degli ospiti è letteralmente un elenco, ogni articolo rappresenta il numero della camera, il nome dell'ospite, l'arrivo, le date di partenza. Le stanze senza nulla accanto a loro sono vuote.

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']] 

Fondamentalmente, è necessario inserirlo in un dizionario. Ecco cosa ho provato:

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 

che mi dà:

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} 

Come si può vedere il dizionario è mettere insieme in nessun ordine particolare. Tuttavia, per questo particolare esercizio, il dizionario deve essere in ordine dal numero di stanza più basso a quello più alto. Credo che ho pensato che sarebbe solo scorrere attraverso ogni lista interna dall'inizio alla fine, testarlo e basta costruire il dizionario in questo ordine.

Qualcuno sa come scrivere correttamente il codice in modo che il dizionario risulti come '' 101 ': Nessuno,' 102 ', Nessuno,' 103 ': Nessuno ... ecc.? E spero che qualcuno possa spiegare perché il mio codice non ha funzionato come volevo.

+3

Le voci del dizionario sono memorizzate come hash e sono, per natura, non ordinate. I tuoi compiti ti richiedono di usare un dizionario? Perché hai bisogno di loro ordinati? –

+0

possibile duplicato di [Articoli che ordinano nel dizionario Python] (http://stackoverflow.com/questions/3127945/items-ordering-in-python-dictionary) – geoffspear

+1

Scusate ragazzi, il mio titolo è un po 'fuorviante, non è vero? Mi interessava di più il motivo per cui il codice diventa confuso in quel modo particolare. Quello che ho raccolto da tutte le tue risposte è che 'è solo' lol sì, richiede un dizionario ma potrei essere in grado di farla franca con uno non ordinato se uso il codice di aix sotto – bang

risposta

10

I dizionari Python standard sono intrinsecamente non ordinati.

Una possibilità è utilizzare OrderedDict. Conserverà l'ordine di inserzione , il che significa che è necessario inserire le voci nell'ordine in cui si desidera recuperarle.

Un'altra possibilità è quella di mantenere il dict come è, ma iterare nell'ordine desiderato:

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

Infine, va notato che il vostro esempio memorizza i numeri di stanza come stringhe piuttosto che interi. Ciò significa che l'ordine è lessicografico ('90' > '100'). Poiché questo è compito, lo lascio come esercizio per la lettura per capire come risolvere questo problema.

+1

Buona modifica. È possibile (dato che questo è compito a casa) che OP possa usare solo determinati tipi di dati. –

+0

È importante sottolineare che l'ordine di OrderedDict è basato sull'ordine di inserimento, piuttosto che sulla chiave (numero di stanza), quindi, a seconda del file di testo di input, potrebbe non essere adatto. – hexparrot

+0

Attenzione che i numeri delle stanze sono in realtà stringhe e il tipo è lessicografico. Se i numeri più piccoli sono scritti come "5" e non "005", non funzionerà. Se questo può essere il caso, un'opzione è convertirli in numeri interi. – pepr

Problemi correlati