Dictionary sorting problem

Bengt Richter bokr at oz.net
Fri Sep 16 20:41:45 EDT 2005


On Fri, 16 Sep 2005 21:42:40 +0200, Irmen de Jong <irmen.NOSPAM at xs4all.nl> wrote:

>JerryB wrote:
>> Hi,
>> I have a dictionary for counting ocurrences of strings in a document.
>> The dictionary looks like this:
>> 
>> 'hello':135
>> 'goodbye':30
>> 'lucy':4
>> 'sky':55
>> 'diamonds':239843
>> 'yesterday':4
>> 
>> I want to print the dictionary so I see most common words first:
>> 
>> 'diamonds':239843
>> 'hello':135
>> 'sky':55
>> 'goodbye':30
>> 'lucy':4
>> 'yesterday':4
>> 
>> How do I do this? Notice I can't 'swap' the dictionary (making keys
>> values and values keys) and sort because I have values like lucy &
>> yesterday which have the same number of occurrences.
>> 
>> Thanks.
>> 
>
>Don't try to 'swap' the dict, just sort a list based on the items in
>the dict. Try this:
>
>original= {
>'hello':135,
>'goodbye':30,
>'lucy':4,
>'sky':55,
>'diamonds':239843,
>'yesterday':4 }
>
>items = sorted( (v,k) for (k,v) in original.iteritems()  )
>items.reverse()   # depending on what order you want
>print items
>
>
>The result is:
>[(239843, 'diamonds'), (135, 'hello'), (55, 'sky'), (30, 'goodbye'), (4, 'yesterday'), 
>(4, 'lucy')]
>
>
or tell sorted what to do ;-)

 >>> original= {
 ... 'hello':135,
 ... 'goodbye':30,
 ... 'lucy':4,
 ... 'sky':55,
 ... 'diamonds':239843,
 ... 'yesterday':4 }
 >>> list(sorted(original.iteritems(), None, lambda t:t[1], True))
 [('diamonds', 239843), ('hello', 135), ('sky', 55), ('goodbye', 30), ('yesterday', 4), ('lucy',4)]

Regards,
Bengt Richter



More information about the Python-list mailing list