добавить элемент в словарь - PullRequest
0 голосов
/ 08 августа 2010

Я много читал на этом форуме, но я не смог найти правильный способ добавить все элементы в свой словарь ... Так что, возможно, кто-то может мне помочь! Сначала объяснение:

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

row - это список из sql-оператора. так что в этом списке несколько значений с одним и тем же ключом ... Я просто хочу получить что-то вроде таблицы что-то вроде этого: {['id': 1, 'point': 2], ['id': 2, 'point': 3]} но для цикла выше результат только последний элемент, потому что он перезаписывает все раньше. Есть идеи????

Ответы [ 2 ]

3 голосов
/ 08 августа 2010

Если у вас есть итерация пар, т.е. [(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 голосов
/ 08 августа 2010

вы переопределяете 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...