Discussione:
scorrere un dizionario in maniera ordinata...
(troppo vecchio per rispondere)
Davide Cittaro
2005-02-03 14:13:49 UTC
Permalink
Ancora io.
diciamo che ho un dizionario cosi' fatto:
dict =
{'p1':{'score':12,
'acc':[pippo, pluto, topo]
},
'p2':{score:9,
acc:[qui, quo, qua]
},
....
}

posso fare un for su dict in maniera da scorrere le chiavi ordinate per
'score' in un colpo solo? Oppure mi devo costruire qualche metodo...
intanto ho visto che sort() non e' metodo dei dizionari, quindi immagino
che si debba usare su dict.keys()... boh? Qualcuno puo' indicarmi la
via?

Grazie mille

davide
--
Davide Cittaro
Drop WINDOWS if you want to reply
Lethalman
2005-02-03 14:22:52 UTC
Permalink
Post by Davide Cittaro
Ancora io.
dict =
{'p1':{'score':12,
'acc':[pippo, pluto, topo]
},
'p2':{score:9,
acc:[qui, quo, qua]
},
....
}
posso fare un for su dict in maniera da scorrere le chiavi ordinate per
'score' in un colpo solo? Oppure mi devo costruire qualche metodo...
intanto ho visto che sort() non e' metodo dei dizionari, quindi immagino
che si debba usare su dict.keys()... boh? Qualcuno puo' indicarmi la
via?
Grazie mille
davide
Che io sappia devi fartelo da solo.
debrando
2005-02-03 16:25:50 UTC
Permalink
"Davide Cittaro" ha scritto:

(...)

Un dizionario Python è per definizione *non* ordinato, non è neppure detto
che ogni volta le chiavi ti siano date nello stesso ordine.

Se quindi hai bisogno di scorrerlo ordinato secondo qualcosa, devi
costruirti una sequenza di chiavi ordinate secondo esso. Poi volendo puoi
nascondere l'operazione in un iteratore ad hoc.

Per ordinare secondo il campo voluto, due soluzioni come da documentazione:
passare alla sort() una funzione di ordinamento ad hoc, oppure (come
consigliato, anzitutto per questioni di efficienza) costruire una lista
temporanea ed ordianare quella. Qualcosa del tipo:

# Genero una lista temporanea di tuple (campo_ordinamento,
chiave_dizionario)
tmplist = [(v['score'], k) for (k,v) in dict.iteritems()]
# Ordino la lista temporanea
tmplist.sort()
# Estraggo le mie chiavi ordinate
sortedkeys = [k for (v, k) in tmplist]
# Et voilà, ora scorro grazie alla chiavi
for k in sortedkeys:
print dict[k]
Post by Davide Cittaro
dict =
{'p1':{'score':12,
'acc':[pippo, pluto, topo]
},
'p2':{score:9,
acc:[qui, quo, qua]
},
....
}
--- debrando
b***@lycos.com
2005-02-03 21:50:34 UTC
Permalink
Forse puo' andarti bene anche un grumo funzionale tipo questo:

sorted(dict, key=lambda x: dict[x]["score"], reverse=True)

(Meglio non usare variabili coi nomi dei tipi)
Bearophile

Continua a leggere su narkive:
Loading...