有效地创建词典列表

时间:2013-06-07 13:46:38

标签: python

我已经实现了一种创建字典列表的方法,但我想知道是否有更有效的方法(同时保留两个列表中的订单元素):

#global variable
dict_agriculture = []

col_name_agriculture = [tuple[0] for tuple in querycurs.description]
rows_agriculture = querycurs.fetchall()
for row in rows_agriculture:
    dict1 = dict(zip(col_name_agriculture, list(row)))
    dict_agriculture.append(dict1)

3 个答案:

答案 0 :(得分:4)

你可以在这里使用列表理解;它在创建最终列表方面更有效率。迭代时不要使用.fetchall(),不要使用tuple作为变量名,并且不需要在每一行调用list

fields = [tup[0] for tup in querycurs.description]
dict_agriculture = [dict(zip(fields, row)) for row in querycurs]

答案 1 :(得分:2)

  

我正在使用sqlite。

在这种情况下,最有效的方法是将row_factory设置为内置的Row类型,它在C中实现,并且比Python中的任何等效代码都快。 / p>

例如......

import sqlite3

con = sqlite3.connect(...)
con.row_factory = sqlite3.Row
# Now queries will return objects which act as both a tuple, and a dictionary,
# so you can just do...
querycurs = con.cursor()
querycurs.execute(...)
dict_agriculture = querycurs.fetchall()

答案 2 :(得分:1)

如果我读得正确,你有一个查询游标,其中.description属性是一个元组列表,字段名称作为第一项。 然后,您想要读取行,使用元组中的行名称将每个行列表转换为行dict。

这可以通过列表理解来完成:

col_name_agriculture = [tuple[0] for tuple in querycurs.description]
dict_agriculture = [dict(zip(col_name_agriculture, row) for row in querycurs]

还要考虑如何使用最终列表 - 如果要按顺序使用,则可以在那里使用生成器表达式。