[EMAIL PROTECTED] 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 -- http://mail.python.org/mailman/listinfo/python-list