2012-06-27 13 views
11

Ich versuche im Grunde, durch ein Diktat zu iterieren und den Schlüssel/Werte vom größten Wert bis zum niedrigsten auszudrucken. Ich habe diese Seite gesucht und eine Menge Leute benutzen Lambda, aber ich bin mir nicht sicher, wie es funktioniert, also versuche ich es jetzt zu vermeiden.Drucken Sie ein Diktat sortiert nach Werten

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

Mit Blick auf den Code oben Ich nahm an, es würde einen Iterator machen, die die Schlüssel/Wert-Paare in der Reihenfolge von der größten zur kleinsten gibt, aber es ist nicht.

Kann jemand sehen, was das Problem ist? oder eine andere Methode, dies zu tun?

+1

Blick auf diese: http://stackoverflow.com/questions/613183/python-sort-a-dictionary-nach-Wert –

Antwort

13

Man kann sich die Tatsache zunutze nehmen, die auf Tupel Werke nach das erste Element unter Berücksichtigung wichtiger als die zweite 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) 

Ausgang:

b: 12 
a: 4 
c: 3 

EDIT : Einstrich, Generator Ausdruck:

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

Ausgang:

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

Sie können die key Parameter von sorted Verwendung durch den zweiten Artikel zu sortieren:

>>> 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 
>>> 
Verwandte Themen