二串表入字典:键序变换

2024-06-02 09:06:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

为什么会这样?我做错什么了吗?你知道吗


Tags: 方法key代码in列表for字典value
3条回答

您需要在此处使用^{}

>>> 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
>>>

常规dictionary对象自然是无序的;它们不保留插入新项的顺序。所以,做:

tabv = {key: value for key, value in zip(idv,v)}

将根据您想要的两个列表创建一个字典,但是项目的顺序将是任意的。你知道吗

如果需要使用有序词典,可以使用OrderedDict

from collections import OrderedDict
tabv = OrderedDict(zip(idv, v))

规则的dict是无序的。你知道吗

dict类型是无序映射。你知道吗

如果需要有序映射,请使用^{}。你知道吗

from collections import OrderedDict

tabv = OrderedDict(zip(idv, v))

相关问题 更多 >