当前位置: 首页 > article >正文

奇怪的Python:为何 list 和 dict 的元素顺序从 Python 3.7 开始保持插入顺序?

你好!我是老邓,你的 Python 导师。今天我们来聊聊 Python 3.7 后 list 和 dict 元素顺序保持插入顺序的特性。

1、问题简介

在 Python 3.7 之前,list 的元素顺序虽然通常与插入顺序一致,但官方文档并没有做出保证。dict 的元素顺序则完全是随机的。

从 Python 3.7 开始,官方正式将“维护插入顺序”作为 list 和 dict 的一个语言特性。这意味着,元素的迭代顺序将始终与其插入顺序相同。

2、想象一下,你正在处理用户提交的调查问卷。问卷中有多个问题,每个问题的答案都存储在一个 list 中。

在 Python 3.6 中,你无法保证处理答案的顺序与用户填写顺序一致,这可能导致数据分析出现偏差。

又例如,你需要记录用户访问网站的页面顺序,使用 dict 存储页面和访问时间。在 Python 3.6 中,dict 的无序性使得你无法直接获取用户访问的页面顺序。

3、原因和解决方案

Python 3.7 中的这一改变源于对 dict 内部实现的优化。新的实现使用了一种更紧凑的哈希表结构,并保留了插入顺序。

这不仅提高了 dict 的性能,也带来了维护插入顺序的特性。对于 list 来说,维持插入顺序一直是其实现的一部分,只是在 3.7 版本才正式写入规范。

如果你需要在 Python 3.6 或更早版本中维护 list 或 dict 的插入顺序,可以使用 collections 模块中的 OrderedDict (对于 dict) 和 list 自身 (对于 list,虽然未保证但通常保持顺序,必要时可以自行记录插入顺序)。

4、代码示例

示例 1:  Python 3.6 中的 dict

 
# Python 3.6
my_dict = {}
my_dict["apple"] = 1
my_dict["banana"] = 2
my_dict["orange"] = 3

for key, value in my_dict.items():
    print(f"{key}: {value}")

输出结果(Python 3.6版本下,每次运行结果可能不同):

 
orange: 3
apple: 1
banana: 2

示例 2: Python 3.7+ 中的 dict

 
# Python 3.7+
my_dict = {}
my_dict["apple"] = 1
my_dict["banana"] = 2
my_dict["orange"] = 3

for key, value in my_dict.items():
    print(f"{key}: {value}")

输出结果:

 
apple: 1
banana: 2
orange: 3

示例 3: Python 3.6 中使用 OrderedDict

 
# Python 3.6
from collections import OrderedDict

ordered_dict = OrderedDict()
ordered_dict["apple"] = 1
ordered_dict["banana"] = 2
ordered_dict["orange"] = 3

for key, value in ordered_dict.items():
    print(f"{key}: {value}")

输出结果:

apple: 1
banana: 2
orange: 3

示例 4: list 的顺序保持

 
# Python 3.7+ (3.6也通常如此,但非规范)
my_list = []
my_list.append("apple")
my_list.append("banana")
my_list.append("orange")

for item in my_list:
    print(item)

输出结果:

 
apple
banana
orange

5、总结

Python 3.7 及以后版本保证了 list 和 dict 的插入顺序。这使得代码更加可预测,也简化了对顺序敏感的操作。如果你需要在早期版本中实现类似的功能,可以使用 collections.OrderedDict。

记住,理解语言的特性对于编写高效、可靠的代码至关重要。希望今天的讲解能够帮助你更好地理解 Python 中的这个重要特性。

全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

二、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

三、python入门资料大全

图片

四、python进阶资料大全

图片

五、python爬虫专栏

图片

六、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

七、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

八、python最新面试题

图片


http://www.kler.cn/a/467237.html

相关文章:

  • ROS小记
  • 提升汽车金融租赁系统的效率与风险管理策略探讨
  • DELL EMC Unity 存储系统扩容之传统池扩容
  • CSS clip-path 属性
  • Vue项目整合与优化
  • 2024秋语法分析作业-B(满分25分)
  • 【0x0014】HCI_Read_Local_Name命令详解
  • 在 macOS 上,你可以使用系统自带的 终端(Terminal) 工具,通过 SSH 协议远程连接服务器
  • 每天40分玩转Django:Django Celery
  • 升级ubuntu24后遗症
  • redis7基础篇2 redis的哨兵模式2
  • BGP基础配置实验
  • 【第二部分--Python之基础】04 函数
  • 广域网连接PPP
  • 气膜滑雪馆:科技创新引领四季滑雪,推动冰雪运动普及—轻空间
  • Unity 中计算射线和平面相交距离的原理
  • 基于YOLOv8的摩托车驾驶员头盔检测系统
  • 逆向入门(6)汇编篇-外挂初体验
  • qml Rectangle详解
  • “大数据+职业本科”:VR虚拟仿真实训室的发展前景