Sorting a multidimensional array by multiple keys

Alex Martelli aleax at mac.com
Mon Apr 2 17:02:51 CEST 2007


Steven Bethard <steven.bethard at gmail.com> wrote:

> Thomas Krüger wrote:
> > Alex Martelli schrieb:
> >> Thomas Krüger <newsgroups at nospam.nowire.org> wrote:
> >>> def sorter(a, b):
> >>>     return cmp(a.id, b.id)
> >>>
> >>> obj_lst.sort(sorter)
> >> A MUCH better way to obtain exactly the same semantics would be:
> >>
> >> def getid(a):
> >>     return a.id
> >>
> >> obj_list.sort(key=getid)
> > 
> > Frankly speaking the purpose of the example was to show how to pass a
> > function as argument for the sort method.
> > Your code may be more efficient but it explains something different.
> 
> Yes, but there's almost never a reason to use the cmp= argument to 
> sort() anymore.  It's almost always better to use the key= argument.

Exactly.  Passing a "comparison function" rather than a key-extraction
function is rarely a good idea -- except for some extremely complicated
cases involving e.g. certain string (or more complicated) fields needing
to be sorted in the reverse direction from others.  In practice, the
existence of that argument and its prominent position as the first
positional argument is due entirely to backwards compatibility issues.


Alex



More information about the Python-list mailing list