itertools.groupby()
ツールを使用します。
from itertools import groupby
for letter, rows in groupby(cur, key=lambda r: r[0][0]):
print ' '.join([r[0] for r in rows])
このgroupby()
関数は の各行をループしcur
、最初の列の最初の文字を取得して、各(letter, rows)
値のタプルを返します。rows
値は別の iterable です。これをループして (たとえば、ループfor
を使用して)、その最初の文字を持つすべての行を一覧表示できます。
これは、すでにソートされている行に依存しています。行が最初の文字の間で交互になっている場合:
A1
A2
B1
B2
A3
A4
それらを別々のグループとして出力します:
A1 A2
B1 B2
A3 A4
ORDER BY firstcolumnname
正しいグループ化を保証するために、クエリに順序付け命令を追加することをお勧めします。
これは、テスト データベースを作成したときに表示されるものです。
>>> cur.execute("SELECT * FROM seats ORDER BY code")
<sqlite3.Cursor object at 0x10b1a8730>
>>> for letter, rows in groupby(cur, key=lambda r: r[0][0]):
... print ' '.join([r[0] for r in rows])
...
A1 A2 A3 A4 A5 A6 A7 A8
B1 B2 B3 B4 B5 B6 B7 B8
C1 C2 C3 C4 C5 C6 C7 C8