我正在使用数据库查询结果。输出将是这样的:
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元素进行排序,但是如何在一开始就按顺序排列它们,而不需要对它们进行排序?
答案 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)])]