我找到了一种在Python中将两个列表转换为一个字典的方法。所以我试图从两个列表创建一个字典。以下是代码段:
>>> v
['2', '3', '4', '1']
>>> idv = sorted(v)
>>> idv
['1', '2', '3', '4']
>>> tabv = {key:value for key, value in zip(idv, v)}
>>> tabv
{'1': '2', '3': '4', '2': '3', '4': '1'}
>>> for key,values in tabv.items():
print key,values
1 2
3 4
2 3
4 1
我不理解的是,为什么键(List idv)的顺序被改变了?
我print key,values
时的期望是:
1 2
2 3
3 4
4 1
为什么会这样?我有什么不对吗?
答案 0 :(得分:2)
您需要在此处使用collections.OrderedDict
:
>>> from collections import OrderedDict
>>> v = ['2', '3', '4', '1']
>>> idv = sorted(v)
>>> tabv = OrderedDict(zip(idv, v))
>>> for key, values in tabv.items():
... print key, values
...
1 2
2 3
3 4
4 1
>>>
常规字典对象自然是无序的;它们不保留插入新项目的顺序。所以,做:
tabv = {key: value for key, value in zip(idv,v)}
将根据您的需要从两个列表中创建一个字典,但项目的顺序将是任意的。
答案 1 :(得分:0)
dict
类型是无序映射。
如果您需要有序映射,请使用OrderedDict
。
from collections import OrderedDict
tabv = OrderedDict(zip(idv, v))
答案 2 :(得分:0)
如果您需要使用有序词典,则可以使用OrderedDict:
from collections import OrderedDict
tabv = OrderedDict(zip(idv, v))
常规dict
无序。