Avatar of dfernan
dfernan
Flag for United States of America asked on

Sort a list of lists

if i have a list of lists like this one: (the one i have is obviously much larger but this is the idea):
new = [['dog',2],['cat',5],['bye',1]]
...
how can i sort it according to the numbers on the second column, i.e., new[0][1]=2....?
i.e., new.sort should become: new.sort(sthg) = [['bye',1],['dog',2],['cat',5]]

How can i access all the numbers in the second column together like it was a vector?
i.e., new[sthg][sthg] = [2,5,1]

How would you sort it alphabetically up/down?
i.e., alphabetically up: new.sort should become: new.sort(sthg) = [['bye',1],['cat',5],['dog',2]]
i.e., alphabetically down: new.sort should become: new.sort(sthg) = [['dog',2],['cat',5],['bye',1]]


Another basic question:
if i have a list L, L[:] means what?????

I am a newbie in python...

Thanks for the help,

Daniel
PythonProgramming

Avatar of undefined
Last Comment
LunarNRG

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Roger Baklund

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Roger Baklund

For the reverse sorting, you could also do this:
new.sort(reverse=1)
 
# or:
new.sort(reverse=True)

Open in new window

LunarNRG

You may also be interested in the 'sorted' and 'reversed' builtins. With the caveat that both of these return new objects, 'sorted' returns a new list and 'reversed' returns an iterator.

>>> help(sorted) # no cmp arg in 3.0
Help on built-in function sorted in module builtins:
sorted(...)
    sorted(iterable, key=None, reverse=False) --> new sorted list

>>> help(reversed)
...
reversed(sequence) -> reverse iterator over values of the sequence
...

Also, as with the 'sorted' builtin, the 'cmp' argument to list.sort is not available in future versions of python starting with 3.0 I believe. You should use the 'key' keyword argument instead which requires a slightly different approach. IIRC, the 'key' argument was introduced in python2.4, so it's safe to use in current code (>=python2.4, of course). For example,

# sort it according to the numbers on the second column, i.e., new[0 [1]=2....? 
new.sort(key=lambda x: x[1])
# ... or ...
from operator import itemgetter
new.sort(key=itemgetter(1))
 
# itemgetter has the added advantage of 
# making it easier to sort on the 2nd element, 
# with a subsort on the first, for example
>>> l = [(1, 2), (3, 0), (1, 1), (2, 0), (1, 0)]
>>> l.sort(key=itemgetter(1, 0))
[(1, 0), (2, 0), (3, 0), (1, 1), (1, 2)]

Open in new window

I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck