2012-06-27 13 views
11

In pratica sto provando a ripetere un dettato e stampare la chiave/i valori dal più grande valore al più basso. Ho cercato questo sito e molte persone stanno usando lambda ma non sono sicuro di come funzioni, quindi per ora cerco di evitarlo.Stampa un dettato ordinato in base ai valori

dictIterator = iter(sorted(bigramDict.iteritems())) 
for ngram, value in dictIterator: 
    print("There are " + str(value) + " " + ngram) 

Guardando oltre il codice di cui sopra ho pensato che avrebbe fatto un iteratore che restituisce le coppie chiave/valore in ordine dal più grande al più piccolo, ma non lo è.

Qualcuno può vedere qual è il problema? o un altro metodo per farlo?

+1

un'occhiata a questo: http://stackoverflow.com/questions/613.183/python-sort-a-dizionario per valore –

risposta

13

Si può sfruttare il fatto che ordinamento funziona su tuple considerando il primo elemento come più importante rispetto al secondo ecc:

d = { "a":4, "c":3, "b":12 } 
d_view = [ (v,k) for k,v in d.iteritems() ] 
d_view.sort(reverse=True) # natively sort tuples by first element 
for v,k in d_view: 
    print "%s: %d" % (k,v) 

uscita:

b: 12 
a: 4 
c: 3 

EDIT : one-liner, espressione del generatore:

sorted(((v,k) for k,v in d.iteritems()), reverse=True) 

uscita:

[(12, 'b'), (4, 'a'), (3, 'c')] 
0
d = { "a":4, "c":3, "b":12 } 
for v in sorted(d.values()): 
    for key in d: 
     if d[ key ] == v: 
      print key, v 
      break 
2
>>> d = { "a":4, "c":3, "b":12 } 
>>> from operator import itemgetter 
>>> lst = sorted(d.iteritems(), key=itemgetter(1)) 
>>> for t in lst: print '%s : %d' % (t[0], t[1]) 
... 
c : 3 
a : 4 
b : 12 
15

È possibile utilizzare il parametro key di sorted per ordinare dal secondo elemento:

>>> d = { "a":4, "c":3, "b":12 } 
>>> from operator import itemgetter 
>>> for k, v in sorted(d.items(), key=itemgetter(1)): 
    print k, v 


c 3 
a 4 
b 12 
>>> 
Problemi correlati