可以安全地假设(并教授)Python dict将保持有序吗?

可以安全地假设(并教授)Python dict将保持有序吗?,python,dictionary,Python,Dictionary,注意:这不是询问Python dict是否保持其顺序 问:Python的口述顺序是否保证了我可以教初学者可以依赖它 有时,我的Python学生认为dict会保持其顺序,因为它确实如此。但传统上,口述被认为是无序的 通常我会教他们不要依赖这个顺序,但我想知道它是否是Python的永久部分,我是否可以让他们依赖它。你应该告诉他们,实际上Python 3.7+的行为就像OrderedICT(也是Python 3.6,但这不是强制的),但是字典没有必要具有这种特性,这正是Python实现的工作方式。以前

注意:这不是询问Python dict是否保持其顺序

问:Python的口述顺序是否保证了我可以教初学者可以依赖它

有时,我的Python学生认为dict会保持其顺序,因为它确实如此。但传统上,口述被认为是无序的


通常我会教他们不要依赖这个顺序,但我想知道它是否是Python的永久部分,我是否可以让他们依赖它。

你应该告诉他们,实际上Python 3.7+的行为就像OrderedICT(也是Python 3.6,但这不是强制的),但是字典没有必要具有这种特性,这正是Python实现的工作方式。

以前,在Python 3.6中,这是dict实现的一个非官方特性。从3.7开始,它现在是
dict
的官方(specced)功能

这种官方性允许您以这种方式教授Python
dict
(而不是一般的“字典”(映射、哈希等)

实际上,如果没有重大的向后兼容性问题,就无法删除该功能,因此也不会

使用
OrderedDict
的其余原因包括一些附加功能,如
move_to_end()
,以及处理此规范的最新情况:例如,如果您希望在早期版本的Python中运行代码,或者向不需要的人员或软件库传达有序性
注意这个新特性。

尽管python
dict
现在被有序地保存,但依赖该属性是有风险的

其中一个副作用是,它会导致您的代码在旧版本的CPython上崩溃

最好改用
OrderedDict

有关更多信息,请参见此处: