可以安全地假设(并教导)Python dict 将保持有序吗? [复制]

Posted

技术标签:

【中文标题】可以安全地假设(并教导)Python dict 将保持有序吗? [复制]【英文标题】:Safe to assume (and teach) that a Python dict will stay ordered? [duplicate] 【发布时间】:2020-11-14 09:44:51 【问题描述】:

注意:这不是询问 Python 字典是否保持其顺序。

问题:Python dict order 是否保证我可以教初学者他们可以依赖它?

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

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

【问题讨论】:

【参考方案1】:

您应该告诉他们,实际上 Python 3.7+ 的行为类似于 OrderedDict(Python 3.6 也是如此,但未强制执行),但字典不一定具有此特性,而这正是 Python 中的实现方式。

【讨论】:

【参考方案2】:

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

这种官方允许你以这种方式教授 Python dict(但不是一般的“字典”(地图、哈希等))。

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

使用OrderedDict 的其余原因涉及一些额外的功能,例如move_to_end() 和a few others,以及处理此规范的最新性:例如,如果您想在早期版本的 Python 中运行代码,或将有序性传达给非 了解这个新功能。

【讨论】:

【参考方案3】:

虽然 python dict 现在按顺序保存,但依赖该属性是有风险的。

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

最好改用OrderedDict

更多信息,您可以在这里查看:http://gandenberger.org/2018/03/10/ordered-dicts-vs-ordereddict/

【讨论】:

以上是关于可以安全地假设(并教导)Python dict 将保持有序吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

什么是一个好的Python配置文件格式,可以轻松安全地由一个脚本编辑并由另一个脚本读取?

Python读取Excel表格数据并以字典dict格式存储

Python字典(dict)

Python字典(dict)使用技巧

Python学习笔记 set&&dict

python 递归地将嵌套的dicts转换为嵌套的namedtuples,为您提供类似于不可变对象文字的东西