我要从sqlite3数据库中提取21,000行,我需要将其放入字典中,然后将其附加到数组中。目前,此循环大约需要1.531秒,我正尽力将其最小化。什么是我可以更快的方法? (我正在使用python 2.7.3)

results = cursor.fetchall()
array = []
for row in results:
    a = {}
    b = row[11]
    c = str(row[8])
    d = str(row[9]) + " ? " + str(row[10])
    e = row[3]
    f = row[4]
    key = e + " - " + f

    rowToAdd = { 'aaa': row[3],
                'bbb' : row[0],
                'ccc' : row[1],
                'ddd' : row[12],
                'eee' : row[2],
                'fff' : row[9],
                'ggg' : row[1],
                'hhh' : str(row[6]) + " (" + str(row[5]) + ")",
                'iii' : e,
                'jjj' : d,
                'kkk' : f
    }

    rowToAdd.append(array)


有没有一种方法可以使用自定义键将光标输出直接映射到词典列表?

有没有更多的pythonic方式可以加快速度?

最佳答案

将串联留给SQLite,并改为使用sqlite3.Row row factory,这将为您提供一个既可以用作元组又可以用作字典的对象。

使用列别名让查询为键命名:

cursor.execute('''
    SELECT
        col3 as aaa, col9 as bbb,
        col6 || ' (' || col5 || ')' as hhh,
        col9 || ' ? ' || col10 as jjj
    FROM SOME_TABLE
''')


然后只需使用该结果即可,而不是建立一个新列表。如果必须列出这些列表,则可以使用:

array = cursor.fetchall()


要么

array = list(cursor)


但是您可能需要对结果进行迭代,因为您需要访问这些行。

10-07 19:23
查看更多