将元组列表转换为dict时,Dict输出全部无序

时间:2014-03-22 13:38:05

标签: python dictionary mysql-python

我正在使用数据库查询结果。输出将是这样的:

rows = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]

例如,来自db

的3行表数据

列名是这样的:

cols = ['col1', 'col2', 'col3']

我想从中列出一些词典,如下所示:

{'col1':1,'col2':2,'col3':3}
{'col1':4,'col2':5,'col3':6}

所以我这样做了:

res=[]
for row in rows:
  res.append(dict(zip(cols,row)))

但是res是这样的:

[{'col2': 2, 'col3': 3, 'col1': 1}, {'col2': 5, 'col3': 6, 'col1': 4}, {'col2': 8, 'col3': 9, 'col1': 7}, {'col2': 2, 'col3': 3, 'col1': 1}, {'col2': 5, 'col3': 6, 'col1': 4}, {'col2': 8, 'col3': 9, 'col1': 7}]

我无法弄清楚为什么键值对不按列名排序。 这不是一个大问题,我可以通过键名对dict元素进行排序,但是如何在一开始就按顺序排列它们,而不需要对它们进行排序?

1 个答案:

答案 0 :(得分:1)

如果您想保留订单,可以使用集合

中的有序词典( OrderedDict
import collections

rows = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
cols = ['col1', 'col2', 'col3']

res = []
for row in rows:
    res.append(collections.OrderedDict(zip(cols,row)))

输出结果为:

[OrderedDict([('col1', 1), ('col2', 2), ('col3', 3)]),
 OrderedDict([('col1', 4), ('col2', 5), ('col3', 6)]),
 OrderedDict([('col1', 7), ('col2', 8), ('col3', 9)])]