Incidentally, I was wondering what the value of using operator.itemgetter is. So I ran some tests.
Morpork:~/offlode repton$ python -m timeit -s 'import math' -s 'a = [(i, math.sin(i)) for i in range(10000)]' -s 'f = lambda e: e[1]' 'sorted(a, key=f)' 10 loops, best of 3: 22.4 msec per loop Morpork:~/offlode repton$ python -m timeit -s 'import math' -s 'import operator' -s 'a = [(i, math.sin(i)) for i in range(10000)]' -s 'f = operator.itemgetter(1)' 'sorted(a, key=f)' 100 loops, best of 3: 18.7 msec per loop So, slight win for operator.itemgetter. I'm not sure exactly how much of a win, since there's all those calls to cmp in the sort operation as well.. Incidentally, here's what happens if you define your own cmp function instead (the way you had to in python <= 2.3): Morpork:~/offlode repton$ python -m timeit -s 'import math' -s 'import operator' -s 'a = [(i, math.sin(i)) for i in range(10000)]' -s 'f = lambda x, y: cmp(x[1], y[1])' 'sorted(a, cmp=f)' 10 loops, best of 3: 163 msec per loop And decorate-sort-undecorate: Morpork:~/offlode repton$ python -m timeit -s 'import math' -s 'import operator' -s 'a = [(i, math.sin(i)) for i in range(10000)]' 'b = [(e[1], e) for e in a]' 'b.sort()' '[e[1] for e in b]' 10 loops, best of 3: 33.9 msec per loop Ho hum.. -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor