Order by value in dictionary

Diez B. Roggisch deets at nospam.web.de
Wed Oct 17 16:21:40 CEST 2007


George Sakkis wrote:

> On Oct 17, 10:06 am, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
>> Diez B. Roggisch wrote:
>> > Abandoned wrote:
>>
>> >> Hi..
>> >> I have a dictionary like these:
>> >> a={'a': '1000', 'b': '18000', 'c':'40', 'd': '600'} ...... 100.000
>> >> element
>> >> I want to sort this by value and i want to first 100 element..
>> >> Result must be:
>> >> [b, a, d, c .....] ( first 100 element)
>>
>> >> I done this using FOR and ITERATOR but it tooks 1 second and this is
>> >> very big time to my project.
>> >> I want to learn the fastest method..
>>
>> > That is the fastest method, unless you write your own ordered dict
>> > implementation that sorts by value. But that will most probably lose
>> > the time when holding up the invariant when inserting key/values into
>> > the dictionary.
>>
>> Actually, I somehow read the FOR and ITERATOR above as something like
>> this:
>>
>> entries = sorted(a.items(), key=lambda v: v[1])[:100]
>>
>> The gist of my statement above is nontheless the same: if you want sorted
>> results, you need to sort...
>>
>> Diez
> 
> If you want the top 100 out of 100K, heapq.nlargest is more than an
> order of magnitude faster.

Oh, cool. Didn't know about that. I'm a bit rusty on how heapsort works,
gotta check that out.

diez



More information about the Python-list mailing list