sorting a list of list

J

james_027

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
 
T

Tim Chase

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:
.... ['a', 1, 9],
.... ['b', 2, 8],
.... ['c', 3, 7],
.... ['d', 4, 6],
.... ['e', 5, 5],
.... ]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
 
M

Matt Nordhoff

Tim said:
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:
... ['a', 1, 9],
... ['b', 2, 8],
... ['c', 3, 7],
... ['d', 4, 6],
... ['e', 5, 5],
... ]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.

Then, instead of "lambda x: x[2]" use "operator.itemgetter(2)" and
instead of "lambda x: x.foo" use "operator.attrgetter('foo')".
--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,440
Members
44,830
Latest member
ZADIva7383

Latest Threads

Top