Python tuples sorting based on last element

11,969

Specify the key argument in the sorted function.

>>> tuple1=[(1, 3), (3, 2), (2, 1)]
>>> output = sorted(tuple1, key=lambda x: x[-1])
>>> print output
[(2, 1), (3, 2), (1, 3)]

The sorted function (as well as the list.sort method) has an optional key argument which specifies what to sort the list on.

Share:
11,969
Friend
Author by

Friend

Born to Code :)

Updated on June 13, 2022

Comments

  • Friend
    Friend almost 2 years

    Here is my question i have tuple1=[(1, 3), (3, 2), (2, 1)] i want to sort tuple based on last digit of each tuple so the resultant will look like this output=[(2, 1), (3, 2), (1, 3)] below is my code

        i=0
    for x in tuples:
        c.append(x[len(x)-1])
        last=sorted(c)
        for y in last.iteritems():
            if(y in x[len(x)-1]):
                print x             
                #b.insert(i,x)
    i=i+1
    

    after running iam getting an error message

        Traceback (most recent call last):
        File "x.py", line 47, in <module>
       sort_last([(1, 3), (3, 2), (2, 1)])
      File "x.py", line 35, in sort_last
     if(y in x[len(x)-1]):
      TypeError: argument of type 'int' is not iterable
    
  • George
    George about 11 years
    +1 for this elegant solution.
  • Friend
    Friend about 11 years
    yup it works.. but is there any other method without using 'lambda' i mean using for loop itself....
  • drekyn
    drekyn about 11 years
    If you need it in reverse order you can also add the reverse keyword: output = sorted(tuple1, key=lambda x: x[-1], reverse=True)
  • drekyn
    drekyn about 11 years
    @Friend this is the most pythonic way to do that, otherwise you should rely on any sorting algorithm and implement it yourself, dealing with bugs, efficiency, etc... are you sure you want to do that? (Rule of thumb: do not reinvent the wheel)