2012-06-27 14 views
11

Básicamente estoy tratando de iterar a través de un dict e imprimir las claves/valores del valor más grande al más bajo. He estado buscando en este sitio y muchas personas están usando lambda, pero no estoy muy seguro de cómo funciona, así que estoy tratando de evitarlo por el momento.Imprimir un dict ordenado por valores

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

Mirando sobre el código anterior supuse que sería un iterador que devuelve los pares clave/valor en orden de mayor a menor, pero no lo es.

¿Alguien puede ver cuál es el problema? u otro método de hacer esto?

+1

vistazo a esto: http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value –

Respuesta

13

Uno puede aprovechar el hecho de que funciona especie de tuplas considerando el primer elemento más importante que el segundo, etc:

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) 

Salida:

b: 12 
a: 4 
c: 3 

EDITAR : one-liner, expresión del generador:

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

Salida:

[(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

Usted puede utilizar el parámetro de keysorted para ordenar por el segundo 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 
>>> 
Cuestiones relacionadas