使用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
值是另一个可迭代的,您可以对其进行循环(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