暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Every Day of a DBA,第124期: Python 中字典(dict)的有序性

原创 ByteHouse 2026-03-15
228

Python 中字典(dict)的有序性

  • Python 3.5 及更早版本:字典是完全无序的。你遍历字典的键/值时,顺序完全不固定,和你插入的顺序无关。
  • Python 3.6:CPython(Python 官方解释器)实现中新增了按插入顺序保存字典元素的特性,但这只是一个「实现细节」,并非语言规范。
  • Python 3.7+:正式将「字典保留插入顺序」写入 Python 语言规范,所有符合规范的 Python 实现(如 CPython、PyPy)都必须遵守。

示例

下面的代码可以直观展示不同版本的差异(你可以在对应版本的 Python 环境中运行测试):

# 创建一个按顺序插入的字典 my_dict = { "a": 1, "b": 2, "c": 3 } # 遍历字典的键,查看顺序 print("字典的键顺序:", list(my_dict.keys())) # 3.5 及更早版本输出(无序,比如):['b', 'a', 'c'] # 3.6+ 版本输出(有序):['a', 'b', 'c']

OrderedDict 的作用变化

OrderedDict是Python中一个 字典 dict的变体,它可以按照元素添加的顺序来保持键值对( key -value pair)的顺序。与普通的字典相比,OrderedDict 保持了元素的添加顺序。这在需要按照添加的顺序访问键值对时非常有用。

在 Python 3.7 之前,如果需要可靠的有序字典,通常会用 collections.OrderedDict(专门为有序设计的字典子类);但 3.7+ 之后,普通 dict 已经具备有序性,OrderedDict 仅在需要额外功能(如 move_to_end() 方法、相等性判断考虑顺序)时才需要使用:

from collections import OrderedDict # 3.7 前:用 OrderedDict 保证有序 ordered_dict = OrderedDict() ordered_dict["x"] = 10 ordered_dict["y"] = 20 print(list(ordered_dict.keys())) # 始终输出 ['x', 'y'] # 3.7+:普通 dict 已等价(除特殊方法外) normal_dict = {"x": 10, "y": 20} print(list(normal_dict.keys())) # 同样输出 ['x', 'y']
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论