Python:多次元配列(タプルの配列)のソート方法

2010年2月14日

前回の記事で辞書配列、リストなどに対する基本的なソーティング方法を紹介しました。


今回は、もうちょっとこだわって、多次元配列(正確にはタプルのリスト)に対するソート方法を 紹介します。

まずは以下のような多次元配列に対して、リストのsort()メソッドを適用してみましょう。 すると、第一要素をキーとしたソーティングが行われます。

1
2
3
>>> hoge = [(1, 23), (2, 100), (3, 54), (4, 200)]
>>> hoge.sort()    # タプルの1番目でソート
    [(1, 23), (2, 100), (3, 54), (4, 200)]

次にsort()メソッドに自分でソートキーを定義してみます。 これにより、自由にソーティングを行うことができます。

詳細には以下のように、 cmp引数に比較式cmpを定義することでソートキーを自由に定義可能です。
# 何も指定しない場合は、タプルの1番目の値がキーとしてその降順にソートされます。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
>>> hoge = [(1, 23), (2, 100), (3, 54), (4, 200)]
    # タプルの1番目でソート 
>>> hoge.sort() 
    [(1, 23), (2, 100), (3, 54), (4, 200)]
    # タプルの2番目で昇順ソート 
>>> hoge.sort( cmp=lambda x, y: cmp(x[1], y[1]) )
    [(1, 23), (3, 54), (2, 100), (4, 200)]
    # タプルの2番目でソート 
>>> hoge.sort( cmp=lambda x, y: cmp(x[1], y[1]), reverse=True )
>>> hoge
    [(4, 200), (2, 100), (3, 54), (1, 23)]