sorting a list of lists
Peter Otten
__peter__ at web.de
Mon Aug 27 13:17:16 EDT 2007
nicksavill at googlemail.com wrote:
> i would like to sort a list of lists. The list is first sorted on the
> second item in the sub-lists (which I can do), then on the third item
> (which I can't).
>
> eg. records = [['dog',1,2], ['chair',2,1], ['cat',1,3], ['horse',3,4],
> ['table',3,2], ['window',3,5]]
>
> I want sorted to [['dog',1,2], ['cat',1,3], ['chair',2,1], ['table',
> 3,2], ['horse',3,4], ['window',3,5]]
>
> To sort on the second item in the sub-lists I do the following
>
> pass1 = itemgetter(1)
> sorted(records, key=pass1)
>
> How can I then sort on the third item in the sub-lists whilst keeping
> the order on the second item?
list.sort() is stable, so
items = sorted(records, key=itemgetter(2)) # minor order first
items.sort(key=itemgetter(1)) # major order
should give the desired result (items with equal item[1] are sorted by
item[2]. Python 2.5 also allows to pass multiple indices to itemgetter()
sorted(records, key=itemgetter(1, 2))
IIRC for Python 2.4 you'd have to write your own key routine:
def key(item):
return item[1], item[2]
sorted(records, key=key)
Peter
More information about the Python-list
mailing list