ToB企服应用市场:ToB评测及商务社交产业平台

标题: 奇怪的Python:为何 list 和 dict 的元素顺序从 Python 3.7 开始保持插入顺 [打印本页]

作者: 灌篮少年    时间: 2025-1-9 00:19
标题: 奇怪的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
  1. [/code] [code]# Python 3.6
  2. my_dict = {}
  3. my_dict["apple"] = 1
  4. my_dict["banana"] = 2
  5. my_dict["orange"] = 3
  6. for key, value in my_dict.items():
  7.     print(f"{key}: {value}")
复制代码

输出效果(Python 3.6版本下,每次运行效果可能不同):
  1. [/code] [code]orange: 3
  2. apple: 1
  3. banana: 2
复制代码

示例 2: Python 3.7+ 中的 dict
  1. [/code] [code]# Python 3.7+
  2. my_dict = {}
  3. my_dict["apple"] = 1
  4. my_dict["banana"] = 2
  5. my_dict["orange"] = 3
  6. for key, value in my_dict.items():
  7.     print(f"{key}: {value}")
复制代码
输出效果:
  1. [/code] [code]apple: 1
  2. banana: 2
  3. orange: 3
复制代码

示例 3: Python 3.6 中使用 OrderedDict
  1. [/code] [code]# Python 3.6
  2. from collections import OrderedDict
  3. ordered_dict = OrderedDict()
  4. ordered_dict["apple"] = 1
  5. ordered_dict["banana"] = 2
  6. ordered_dict["orange"] = 3
  7. for key, value in ordered_dict.items():
  8.     print(f"{key}: {value}")
复制代码

输出效果:
  1. apple: 1
  2. banana: 2
  3. orange: 3
复制代码

示例 4: list 的顺序保持
  1. [/code] [code]# Python 3.7+ (3.6也通常如此,但非规范)
  2. my_list = []
  3. my_list.append("apple")
  4. my_list.append("banana")
  5. my_list.append("orange")
  6. for item in my_list:
  7.     print(item)
复制代码

输出效果:
  1. [/code] [code]apple
  2. banana
  3. orange
复制代码

5、总结
Python 3.7 及以后版本保证了 list 和 dict 的插入顺序。这使得代码更加可预测,也简化了对顺序敏感的操作。假如你需要在早期版本中实现类似的功能,可以使用 collections.OrderedDict。
记着,理解语言的特性对于编写高效、可靠的代码至关重要。希望今天的解说可以或许资助你更好地理解 Python 中的这个重要特性。

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



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



三、python入门资料大全



四、python进阶资料大全



五、python爬虫专栏



六、入门学习视频全套
我们在看视频学习的时间,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时间练手项目就很得当了。



七、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才气将本身的所学运用到现实当中去,这时间可以搞点实战案例来学习。



八、python最新口试题



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4