我有一本以特定顺序声明的字典,并希望始终保持该顺序。键/值不能真正根据它们的值按顺序保存,我只希望它按照我声明的顺序排列。
所以如果我有字典:
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
如果我查看它或遍历它,它就不是这个顺序。有什么方法可以确保 Python 保持我在其中声明键/值的显式顺序?
原文由 roflwaffle 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一本以特定顺序声明的字典,并希望始终保持该顺序。键/值不能真正根据它们的值按顺序保存,我只希望它按照我声明的顺序排列。
所以如果我有字典:
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
如果我查看它或遍历它,它就不是这个顺序。有什么方法可以确保 Python 保持我在其中声明键/值的显式顺序?
原文由 roflwaffle 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
从 Python 3.6 开始,标准
dict
类型默认保持插入顺序。定义
将生成一个字典,其中的键按照源代码中列出的顺序排列。
这是通过为稀疏哈希表使用一个带有整数的简单数组来实现的,其中这些整数索引到另一个存储键值对(加上计算的哈希)的数组中。后一个数组恰好按插入顺序存储项目,整个组合实际上使用的内存少于 Python 3.5 及之前的实现。有关详细信息,请参阅 Raymond Hettinger 的原始想法帖子。
在 3.6 中,这仍然被认为是一个实现细节;请参阅 Python 3.6 文档中的新增功能:
Python 3.7 将此实现细节提升为 _语言规范_,因此现在强制要求
dict
在与该版本或更新版本兼容的所有 Python 实现中保留顺序。参见 BDFL 的声明。从 Python 3.8 开始,字典还支持 反向迭代。在某些情况下,您可能仍想使用
collections.OrderedDict()
类,因为它在标准dict
类型之上提供了一些附加功能。例如 可逆(这扩展到 视图对象)和支持重新排序(通过move_to_end()
方法)。