它看起来像返回的列表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是错误的吗?我找不到任何证明这一点的文件.
Ale*_*lli 78
是的,您观察到的确实是一个保证属性 - 如果不改变字典,则keys(),values()和items()以全等顺序返回列表.iterkeys()&c也以与相应列表相同的顺序迭代.
是的。从 CPython 3.6 开始,字典按照您插入的顺序返回项目。
忽略说这是一个实现细节的部分。此行为在 CPython 3.6 中得到保证,并且是从 Python 3.7 开始的所有其他 Python 实现所必需的。
对文档的良好参考。无论文档/实现如何,您都可以通过以下方式保证订单:
k, v = zip(*d.iteritems())
Run Code Online (Sandbox Code Playgroud)
根据http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects,dict的keys(),values()和items()方法将返回其命令的相应迭代器对应.但是,我无法找到对python 2.x官方文档的引用.
所以据我所知,答案是肯定的,但仅限于python 3.0+
| 归档时间: |
|
| 查看次数: |
91175 次 |
| 最近记录: |