将项目添加到字典

时间:2010-08-08 10:32:39

标签: python dictionary

我在该论坛上阅读了很多内容,但我找不到将所有项目添加到我的字典中的正确方法......所以也许有人可以帮助我! 首先解释一下:

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]} 但是对于上面的循环结果只是最后一项,因为它会覆盖之前的所有项目。有任何想法吗????

2 个答案:

答案 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)