它看起来像返回的列表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是错误的吗?我找不到任何证明这一点的文件.
回答另一个SO问题(那里)时出现了问题.
当我在python集上迭代几次(不在调用之间改变它)时,我可以假设它总是以相同的顺序返回元素吗?如果没有,改变订单的理由是什么?它是确定性的还是随机的?还是实现定义?
当我反复调用相同的python程序(不是随机的,不依赖于输入)时,我会得到相同的排序吗?
基本问题是,如果python set迭代顺序仅取决于用于实现集合的算法,还取决于执行上下文?