合并两个列表到字典时保持顺序

10 投票
2 回答
10487 浏览
提问于 2025-04-17 18:52

我正在使用mysqldb来连接mysql数据库,我把元数据(列信息)放在一个变量里,把数据(行信息)放在另一个变量里。现在我需要把这个列表和元组合并成一个字典,并且还要保持顺序。我知道字典本身是无序的,但有没有其他方法可以做到这一点呢?

cursor.description = ['userid', 'cid', 'mid', 'did', 'msid']
data = (29L, 35L, None, '', None)

result = {}
for i in data:
    result.update = dict(zip(cols, i))

期望的结果

result = {'userid': 29L, 'cid': 35L, 'mid': None, 'did': '', 'msid': None}

2 个回答

1

忘掉字典吧

>>> cols=['userid', 'cid', 'mid', 'did', 'msid']
>>> data = (29L, 35L, None, '', None)
>>> zip(cols,data)
[('userid', 29L), ('cid', 35L), ('mid', None), ('did', ''), ('msid', None)]

如果你有很多结果集,先设置一个数组,然后用append方法把结果添加进去。

>>> myarray.append(zip(cols,data))
16

使用一个叫做 OrderedDict 的东西:

from collections import OrderedDict

result = OrderedDict(zip(cursor.description, data))

举个例子:

>>> from collections import OrderedDict
>>> cols = ['userid', 'cid', 'mid', 'did', 'msid']
>>> data = (29L, 35L, None, '', None)
>>> result = OrderedDict(zip(cols, data))
>>> result
OrderedDict([('userid', 29L), ('cid', 35L), ('mid', None), ('did', ''), ('msid', None)])
>>> result['userid']
29L
>>> result['cid']
35L
>>> list(result)
['userid', 'cid', 'mid', 'did', 'msid']

从 CPython 3.6 版本开始,以及 Python 3.7 版本开始,普通的 dict(字典)会按照你添加的顺序来排序,所以如果你确定你的代码会在合适的版本下运行,其实可以用 dict 来代替 OrderedDict

仅适用于 Python 3.7 及以上版本(或者在 CPython 下的 Python 3.6):

>>> cols = ['userid', 'cid', 'mid', 'did', 'msid']
>>> data = (29, 35, None, '', None)
>>> result = dict(zip(cols, data))
>>> result
{'userid': 29, 'cid': 35, 'mid': None, 'did': '', 'msid': None}
>>> result['userid']
29
>>> result['cid']
35
>>> list(result)
['userid', 'cid', 'mid', 'did', 'msid']

撰写回答