两个字符串列表到字典:键顺序更改

时间:2014-12-16 02:33:45

标签: python dictionary

我找到了一种在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

为什么会这样?我有什么不对吗?

3 个答案:

答案 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无序。