pythonsortingdictionaryloops

Print a dict sorted by values


I'm basically trying to iterate through a dict and print out the key / values from largest value to lowest. I have been searching this site and a lot of people are using lambda but I'm not really sure how its working so I'm trying to avoid it for now.

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

Looking over the code above I assumed it would make an iterator which returns the key/value pairs in order from largest to smallest but it's not.

Can anyone see what the problem is? or another method of doing this?


Solution

  • One can take advantage of the fact that sort works on tuples by considering the first element as more important than the second 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)
    

    Output:

    b: 12
    a: 4
    c: 3
    

    EDIT: one-liner, generator expression:

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

    Output:

    [(12, 'b'), (4, 'a'), (3, 'c')]