我从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方法可以加快速度吗?
答案 0 :(得分:2)
将连接保留给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)
但是你可能会更好地迭代结果,因为你需要访问行。