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.
Comments
-
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 thisoutput=[(2, 1), (3, 2), (1, 3)]
below is my codei=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 about 11 years+1 for this elegant solution.
-
Friend about 11 yearsyup it works.. but is there any other method without using 'lambda' i mean using for loop itself....
-
drekyn about 11 yearsIf you need it in reverse order you can also add the
reverse
keyword:output = sorted(tuple1, key=lambda x: x[-1], reverse=True)
-
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)