如果未修改,dicts是否保留迭代顺序?

Cla*_*diu 19 python algorithm hash dictionary

如果我在Python中有一个字典,并且我遍历它一次,然后再次,那么迭代顺序是否保证保留,因为我没有插入,删除或更新字典中的任何项目?(但我可能已经做过查找).

Nik*_*nić 31

这是dict.items() 文档说的:

dict.items()返回字典的(键,值)对列表的副本.

如果调用items(),keys(),values(),iteritems(),iterkeys()和itervalues()而没有对字典进行干预,则列表将直接对应.

我认为如果您所做的只是迭代,那么假设项目排序不会改变是合理的.

  • 没有必要假设:文档明确告诉您,如果您所做的只是交互,订单将不会改变! (9认同)

Ten*_*she 12

dict像大多数实现一样的标准Python 不保留排序,因为通常使用密钥访问项目.

然而,可预测的迭代有时是有用的,并且在Python 3.1中,collections模块包含OrderedDict,它以保持顺序而具有最小的性能开销.

  • 这是一个很好的问题,但这不是正确的答案. (2认同)

Joh*_*hin 5

是.没有涉及随机化.有一个更强大的保证 - 见这里.

  • @ChristopheD:他不关心订购是什么.所有他关心的顺序都是在同一个线程中的两次迭代之间没有改变.更改Python版本或更改平台无关紧要. (4认同)