[Tutor] how to sort a dictionary by values
Kent Johnson
kent37 at tds.net
Wed Aug 8 13:09:46 CEST 2007
Tiger12506 wrote:
>> Just curious: Is there a reason to use __getitem__() over itemgetter (used
>> in the example in my reply)?
>
> __getitem__ is a method builtin to a dict object. itemgetter 1) has to be
> imported 2) is more generically used, therefore probably using a more
> generic/slower algorithm
itemgetter() written in C and should be pretty fast. The actual sort
algorithm is the same in either case, in fact the list of keys to be
sorted is the same in either case.
On my computer my version seems to be a little faster on random data but
as I noted in a separate email, the results are different so the
algorithm should be chosen based on the desired results.
In [27]: import random
In [28]: d = dict( (i, random.random()) for i in range(1000) )
In [29]: import timeit
In [34]: timeit.Timer('sorted(d.keys(), key=d.__getitem__,
reverse=True)', 'from __main__ import d').timeit(10000)
Out[34]: 7.3717570304870605
In [38]: timeit.Timer('sorted(d.items(), key=operator.itemgetter(1),
reverse=True)', 'from __main__ import d; import operator').timeit(10000)
Out[38]: 8.2723259925842285
Kent
More information about the Tutor
mailing list