jhub1 - 7 months ago 48
Python Question

# Sorting list of tuples based on results of operation (division)

Ok - been struggling on this for awhile. I've just started learning Python so very new at this.

I have a list of tuples that needs to be sorted by the ratio of the value in each tuple.

Input:

``````L = [(1,3), (1,7), (4,8)]
``````

Returns a sorted list:

``````L = [(1,7), (1,3), (4,8)]
``````

It needs to be sorted using sort and and a custom key. I've seen people use itemgetter and I can't get that version to work either.

My attempt so far:

``````sorted(L, key = lambda x: [(i[0]/float(i[1])) for i in x])
``````

I've been using this as a guide:
How to sort (list/tuple) of lists/tuples?

It seems using itemgetter is the fastest but I can't get that to work either...

You were very close. You didn't need the for loop in your `lambda` function.

``````>>> L = [(1,3), (1,7), (4,8)]
>>> sorted(L, key=lambda i: i[0]/float(i[1])) # no need for the for loop
[(1, 7), (1, 3), (4, 8)]
>>>
``````

You can also make use of `operator.itemgetter()` like so:

``````>>> L = [(1,3), (1,7), (4,8)]
>>> from operator import itemgetter
>>> ig = itemgetter(0), itemgetter(1)
>>> sorted(L, key= lambda i: ig[0](i)/float(ig[1](i)))
[(1, 7), (1, 3), (4, 8)]
>>>
``````