By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,345 Members | 1,758 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,345 IT Pros & Developers. It's quick & easy.

sorting a list of list

P: n/a
hi,

are there available library or pythonic algorithm for sorting a list
of list depending on the index of the list inside the list of my
choice?

d_list = [
['a', 1, 9],
['b', 2, 8],
['c', 3, 7],
['d', 4, 6],
['e', 5, 5],
]

Thanks
james
Nov 21 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
are there available library or pythonic algorithm for sorting a list
of list depending on the index of the list inside the list of my
choice?
The built-in sorted() function and the sort() method on various
collections take an optional "key=function" keyword paramater
with which you can pass a function (lambdas are convenient) to
extract the bit on which you want to compare:
>>d_list = [
.... ['a', 1, 9],
.... ['b', 2, 8],
.... ['c', 3, 7],
.... ['d', 4, 6],
.... ['e', 5, 5],
.... ]
>>print sorted.__doc__
sorted(iterable, cmp=None, key=None, reverse=False) --new
sorted list
>>sorted(d_list, key=lambda x: x[2]) # sort by the 3rd item
[['e', 5, 5], ['d', 4, 6], ['c', 3, 7], ['b', 2, 8], ['a', 1, 9]]
>>sorted(d_list, key=lambda x: x[1]) # sort by the 2nd item
[['a', 1, 9], ['b', 2, 8], ['c', 3, 7], ['d', 4, 6], ['e', 5, 5]]
>>sorted(d_list, key=lambda x: x[0]) # sort by the 1st item
[['a', 1, 9], ['b', 2, 8], ['c', 3, 7], ['d', 4, 6], ['e', 5, 5]]

-tkc

Nov 21 '07 #2

P: n/a
Tim Chase wrote:
>are there available library or pythonic algorithm for sorting a list
of list depending on the index of the list inside the list of my
choice?

The built-in sorted() function and the sort() method on various
collections take an optional "key=function" keyword paramater
with which you can pass a function (lambdas are convenient) to
extract the bit on which you want to compare:
>>>d_list = [
... ['a', 1, 9],
... ['b', 2, 8],
... ['c', 3, 7],
... ['d', 4, 6],
... ['e', 5, 5],
... ]
>>>print sorted.__doc__
sorted(iterable, cmp=None, key=None, reverse=False) --new
sorted list
>>>sorted(d_list, key=lambda x: x[2]) # sort by the 3rd item
[['e', 5, 5], ['d', 4, 6], ['c', 3, 7], ['b', 2, 8], ['a', 1, 9]]
>>>sorted(d_list, key=lambda x: x[1]) # sort by the 2nd item
[['a', 1, 9], ['b', 2, 8], ['c', 3, 7], ['d', 4, 6], ['e', 5, 5]]
>>>sorted(d_list, key=lambda x: x[0]) # sort by the 1st item
[['a', 1, 9], ['b', 2, 8], ['c', 3, 7], ['d', 4, 6], ['e', 5, 5]]
Not to be too complicated, but there are functions that return a
callable that is faster than a lambda.
>>import operator
Then, instead of "lambda x: x[2]" use "operator.itemgetter(2)" and
instead of "lambda x: x.foo" use "operator.attrgetter('foo')".
--
Nov 21 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.