operator.itemgetter or lambda
Solution 1:
The performance of itemgetter is slightly better:
>>> f1 = lambda: sorted(w, key=lambda x: x[1])
>>> f2 = lambda: sorted(w, key=itemgetter(1))
>>> timeit(f1)
21.33667682500527
>>> timeit(f2)
16.99106214600033
Solution 2:
Leaving aside the speed issue, which is often based on where you make the itemgetter or lambda function, I personally find that itemgetter
is really nice for getting multiple items at once: for example, itemgetter(0, 4, 3, 9, 19, 20)
will create a function that returns a tuple of the items at the specified indices of the listlike object passed to it. To do that with a lambda, you'd need lambda x:x[0], x[4], x[3], x[9], x[19], x[20]
, which is a lot clunkier. (And then some packages such as numpy
have advanced indexing, which works a lot like itemgetter()
except built in to normal bracket notation.)