Python Forum

Full Version: Sort last
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have been taking a class, so this must count as homework. So thing is given a list of non-empty tuples, return a list sorted in increasing order by the last element in each tuple. e.g. [(1, 7), (1, 3), (3, 4, 5), (2, 2)] yields [(2, 2), (1, 3), (3, 4, 5), (1, 7)] Hint: use a custom key= function to extract the last element form each tuple.
Here's my go :
def sort_last(tuples):
     for t in tuples :
          last_element = t[-1]
     return sorted(tuples, key = last)
Unfortunately, this is all i have been able to do. I don't know how can I sort the list on the basis of its last element in ascending order. Any help would be appreciated
>>> tup=[(1, 7), (1, 3), (3, 4, 5), (2, 2)]
>>> sorted(tup, key=lambda x:x[-1])
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
>>>
You can use the itemgetter.

from operator import itemgetter

tup = [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
sorted(tup, key=itemgetter(-1))
The itemgetter could also used to access keys in a dict:
data = [{"x": 10, "y": 42},{"x": 20, "y": 44},{"x": 13, "y": -1}]

# sort by x
sorted(d, key=itemgetter("x"))

# sort by x and then y
sorted(d, key=itemgetter("x", "y"))

# sort by y and then x
sorted(d, key=itemgetter("y", "x"))
How it works:

my_itemgetter = itemgetter(1)
# the itemgetter returns a callable, which takes the sequence as input
my_itemgetter([1,2,3])
Output:
2
If you call it in one line, it looks a bit strange:
itemgetter(1)([1,2,3])
@anbu23 and @DeaD_EyE thanks for your replies.
Here's the code if anyone needs it in the future :
def sort_last(tuples):
     for t in tuples :
          last_element = t[-1]
     return sorted(tup, key=lambda x:x[-1])
tup =[ (1, 7), (1, 3), (3, 4, 5), (2, 2)]
print(sort_last(tup))
And output :
Output:
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
  • Lines 2 & 3 are not doing anything useful, they can be removed as line 4 does all the work.
  • On line 4, sorted should be passed tuples instead of using the global tup.

Code becomes
def sort_last(tuples):
    return sorted(tuples, key=lambda x: x[-1])


tup = [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
print(sort_last(tup))
Output:
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
Thanks @Yoriz. Not only do i get the same expected result, but it make my codes shorter
(May-04-2020, 03:52 PM)Yoriz Wrote: [ -> ][*]On line 4, sorted should be passed tuples instead of using the global tup.
But, if I may ask, what is this global tup you are talking about? And where can it be used?
tup is just a name, which refers to the object [(1, 7), (1, 3), (3, 4, 5), (2, 2)].

anbu23 named it tup.
I guess he has chosen this name, because the inner elements are tuples.
Finding the right names is not always easy.