# Sorting of list containing tuples

Discussion in 'Python' started by Ronny Mandal, May 18, 2006.

1. ### Ronny MandalGuest

Hi!

Assume we have a list l, containing tuples t1,t2...

i.e. l = [(2,3),(3,2),(6,5)]

And now I want to sort l reverse by the second element in the tuple,
i.e the result should ideally be:

l = [(6,5),(2,3),(3,2)]

Any ideas of how to accomplish this?

Thanks,

Ronny Mandal
Ronny Mandal, May 18, 2006

2. ### Paul RubinGuest

Ronny Mandal <> writes:
> And now I want to sort l reverse by the second element in the tuple,
> i.e the result should ideally be:
>
> l = [(6,5),(2,3),(3,2)]

sorted(l, key = lambda a: -a[1])
Paul Rubin, May 18, 2006

3. ### Ronny MandalGuest

Uhm, thanks. (I've used lambda-sort earlier, but quite forgot......)

On 18 May 2006 12:38:55 -0700, Paul Rubin
<http://> wrote:

>Ronny Mandal <> writes:
>> And now I want to sort l reverse by the second element in the tuple,
>> i.e the result should ideally be:
>>
>> l = [(6,5),(2,3),(3,2)]

>
>sorted(l, key = lambda a: -a[1])
Ronny Mandal, May 18, 2006
4. ### Dave HansenGuest

On Thu, 18 May 2006 21:29:59 +0200 in comp.lang.python, Ronny Mandal
<> wrote:

>Hi!
>
>Assume we have a list l, containing tuples t1,t2...
>
>i.e. l = [(2,3),(3,2),(6,5)]
>
>And now I want to sort l reverse by the second element in the tuple,
>i.e the result should ideally be:
>
> l = [(6,5),(2,3),(3,2)]
>
>
>Any ideas of how to accomplish this?
>
>
>Thanks,
>
>Ronny Mandal

>>> def my_cmp(t1,t2):

c1 = t1[1]
c2 = t2[1]
if c1 > c2: return 1
if c2 > c1: return -1
return 0
>>> l

[(2, 3), (3, 2), (6, 5)]
>>> l.sort(cmp=my_cmp, reverse = True)
>>> l

[(6, 5), (2, 3), (3, 2)]

HTH,
-=Dave

--
Change is inevitable, progress is not.
Dave Hansen, May 18, 2006
5. ### Wojciech =?iso-8859-2?Q?Mu=B3a?=Guest

Ronny Mandal wrote:
> Assume we have a list l, containing tuples t1,t2...
>
> i.e. l = [(2,3),(3,2),(6,5)]
>
> And now I want to sort l reverse by the second element in the tuple,
> i.e the result should ideally be:
>
> l = [(6,5),(2,3),(3,2)]
>
>
> Any ideas of how to accomplish this?

def cmpfun(a,b):
return cmp(b[1],a[1])

l.sort(cmpfun)
Wojciech =?iso-8859-2?Q?Mu=B3a?=, May 18, 2006
6. ### Guest

>>> l = [(2,3),(3,2),(6,5)]
>>> from operator import itemgetter
>>> sorted(l, key=itemgetter(1), reverse=True)

[(6, 5), (2, 3), (3, 2)]

Bye,
bearophile
, May 18, 2006
7. ### Christoph HaasGuest

On Thu, May 18, 2006 at 12:38:55PM -0700, Paul Rubin wrote:
> Ronny Mandal <> writes:
> > And now I want to sort l reverse by the second element in the tuple,
> > i.e the result should ideally be:
> >
> > l = [(6,5),(2,3),(3,2)]

>
> sorted(l, key = lambda a: -a[1])

Or in Python <2.4:

l.sort(lambda x,y: x[1]-y[1])

(Although that's not technically perfect. Sort expect a function that
returns -1, 0 or 1. Here we get positive integers and negative
integers. YMMV.)

Kindly
Christoph
Christoph Haas, May 18, 2006
8. ### Christoph HaasGuest

On Thu, May 18, 2006 at 09:52:39PM +0200, Christoph Haas wrote:
> On Thu, May 18, 2006 at 12:38:55PM -0700, Paul Rubin wrote:
> > Ronny Mandal <> writes:
> > > And now I want to sort l reverse by the second element in the tuple,
> > > i.e the result should ideally be:
> > >
> > > l = [(6,5),(2,3),(3,2)]

> >
> > sorted(l, key = lambda a: -a[1])

>
> Or in Python <2.4:
>
> l.sort(lambda x,y: x[1]-y[1])
>
> (Although that's not technically perfect. Sort expect a function that
> returns -1, 0 or 1. Here we get positive integers and negative
> integers. YMMV.)

Crap... why do I always forget about cmp()?

This should be it:

l.sort(lambda x,y: cmp(x[1],y[1]))

Kindly
Christoph
Christoph Haas, May 18, 2006