Python字典:键()和值()总是相同的顺序?

Jas*_*oon 285 python

它看起来像返回的列表keys()values()字典的方法总是一对一的映射(假设字典在调用2方法之间没有改变).

例如:

>>> d = {'one':1, 'two': 2, 'three': 3}
>>> k, v = d.keys(), d.values()
>>> for i in range(len(k)):
    print d[k[i]] == v[i]

True
True
True
Run Code Online (Sandbox Code Playgroud)

如果你不改变调用keys()和调用之间的字典values(),假设上面的for循环总是打印True是错误的吗?我找不到任何证明这一点的文件.

nos*_*klo 324

发现这个:

如果items(),keys(),values(), iteritems(),iterkeys(),和 itervalues()被称为中间没有修改的字典,列表会直接对应.

2.x文档3.x文档上.

  • 显然3.x文档中的陈述更清楚:"项目的顺序将直接对应" (4认同)
  • 3.7文档中缺少此文本。我只能认为是因为3.7中的“词典保持插入顺序”:https://mail.python.org/pipermail/python-dev/2017-December/151283.html (3认同)

Ale*_*lli 78

是的,您观察到的确实是一个保证属性 - 如果不改变字典,则keys(),values()和items()以全等顺序返回列表.iterkeys()&c也以与相应列表相同的顺序迭代.


Bjo*_*orn 47

是的,它在python 2.x中得到保证:

如果迭代键,值和项视图而没有对字典的干预修改,则项的顺序将直接对应.


Bor*_*ris 9

是的。从 CPython 3.6 开始,字典按照您插入的顺序返回项目

忽略说这是一个实现细节的部分。此行为在 CPython 3.6 中得到保证,并且是从 Python 3.7 开始的所有其他 Python 实现所必需的。


Sas*_* NF 7

对文档的良好参考。无论文档/实现如何,您都可以通过以下方式保证订单:

k, v = zip(*d.iteritems())
Run Code Online (Sandbox Code Playgroud)


syk*_*ora 5

根据http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects,dict的keys(),values()和items()方法将返回其命令的相应迭代器对应.但是,我无法找到对python 2.x官方文档的引用.

所以据我所知,答案是肯定的,但仅限于python 3.0+