Pythonで多重リストのソート

要素がタプルであるようなリストをソートする場合に, 要素のn番目でもって比較して並べる. リストの関数であるsortにはkeyとcmpというオプション引数があってこれで比較の条件を指定できる.

例えば, リストの要素が文字列であるが, 実際には数値とみなしてソートしたい場合には

>>> a = ['00100', '010', '1']
>>> a.sort(); a
['00100', '010', '1']
>>> a.sort(key=int); a
['1', '010', '00100']

というふうにできる. これまでこのkeyの機能を, 要素をint型だとみなすという意味だと思っていたが, 実際にはもっと一般的なもので, 多重リストの場合,

>>> a = [(0, 2), (1, 2), (2, 0)]
>>> a.sort(key=lambda x: x[0]); a
[(0, 2), (1, 2), (2, 0)]
>>> a.sort(key=lambda x: x[1]); a
[(2, 0), (0, 2), (1, 2)]

となる. ようするにkey=intはint型というわけではなくて単に, 各引数xに関数int(x)を適用してから比較(cmpで指定された関数)しているということらしい. a.sort(cmp=lambda x, y: cmp(x[0], y[0]))とするよりもちょっとスマート.

http://wiki.python.org/moin/HowTo/Sorting