Sorting Lists

Nick Perkins nperkins7 at
Tue Jul 24 14:32:28 EDT 2001

"Colin Meeks" <colin at> wrote in message
news:lSh77.64029$2V.13507417 at
> I have a list that comprises of First Name, Surname, Age
> The list looks something like
> ,"Bean","15"]]
> How can I sort the list to rearrange it by either First Name, Surname, Age
> I believe I'd have to use a cmpfunc in the sort, but not too sure how to
> achieve the above.
> Thanks
> Colin
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (
> Version: 6.0.265 / Virus Database: 137 - Release Date: 18/07/2001

You don't have to use a custom compare sort.
You can get what you want by creating a temp list, consisting of 'decorated'
values, and sorting that list.  These are actually tuples whose second
element is the real data, and the first element is a copy of the field that
you want to sort by.  (or a computed value, if you want)

So, if you want to sort by surname, for example,
you can transform each item like ["Mickey","Mouse","50"]
into ("Mouse",["Mickey","Mouse","50"]).
You use a regular sort on the list of transformed values,
then 'extract' your original values.

Here's an example of sorting records by a given field:

def sort_by_field(seq,index):
    tmp = [ (item[index],item) for item in seq ]
    return [ item for (_,item) in tmp ]

data = [["Mickey","Mouse","50"],

data_by_lastname = sort_by_field(data,1)

print 'by last name:'
for record in data_by_lastname:
    print record


by last name:
['Kim', 'Bean', '15']
['Stan', 'Mantz', '3']
['Mickey', 'Mouse', '50']
['Junior', 'Wilst', '40']

More information about the Python-list mailing list