【问题标题】:add item to dictionary将项目添加到字典
【发布时间】:2010-08-08 10:32:38
【问题描述】:

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

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

【问题讨论】:

  • 在迭代之前不要检查列表的长度是否为非空。 this 隐含在对其进行迭代。
  • 你应该接受肯尼的回答
  • 如果cur 是数据库上的游标,那么可能存在一种行为类似于字典的游标。

标签: python dictionary


【解决方案1】:

如果您有一个可迭代的对,即[(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

【讨论】:

  • 效果很好!呃,这么短……太棒了!所以,我会看看我是否可以继续……必须改变,因为我以前用过字典!感谢您的快速帮助,太好了!
【解决方案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)

【讨论】:

  • 但随后出现此错误:NameError: global name 'GID_Distances' is not defined
  • 那肯定有错别字。没有充分的理由发生这种情况。例如,您可以正常访问columns,它与GID_Distances 定义在同一块级别。检查两个地方的拼写是否相同。
  • 不要以为有错别字,因为是同一个代码...我只是加了一个#...
  • 仔细检查以确保。我发现变量名的复制和粘贴通常有效。是否涉及任何功能?由于缩进混乱,可能会发生这种事情。
  • 但错误发生在循环的行中...那是我第一次使用GID_Distances,因为我之前删除了该行...
猜你喜欢
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 2011-01-08
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多