我在该论坛上阅读了很多内容,但我找不到将所有项目添加到我的字典中的正确方法......所以也许有人可以帮助我! 首先解释一下:
rows = cur.fetchall()
columns=[desc[0] for desc in cur.description]
GID_Distances = {}
if len(rows) > 0:
for row in rows:
items = zip(columns, row)
GID_Distances = {}
for (name, value) in items:
GID_Distances[name]=value
rows是sql语句的列表。所以在那个列表中有几个具有相同键的值...我只想得到像表一样的东西 这样的事情: {['id':1,'point':2],['id':2,'point':3]} 但是对于上面的循环结果只是最后一项,因为它会覆盖之前的所有项目。有任何想法吗????
答案 0 :(得分:3)
如果您有一对可迭代的对象[(k1,v1),(k2,v2),...]
,则可以在其上应用dict
以使其成为字典。因此,您的代码可以简单地编写为
rows = cur.fetchall()
columns = [desc[0] for desc in cur.description]
# or: columns = list(map(operator.itemgetter(0), cur.description))
# don't call list() in Python 2.x.
GID_Distances = [dict(zip(columns, row)) for row in rows]
# note: use itertools.izip in Python 2.x
答案 1 :(得分:2)
您正在重新定义GID_Distances
到循环中的空白字典而不先存储该值。将行存储在列表中,如下所示:
rows = cur.fetchall()
columns=[desc[0] for desc in cur.description]
results = []
for row in rows:
GID_Distances = {}
items = zip(columns, row)
for (name, value) in items:
GID_Distances[name]=value
results.append(GID_Distances)