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
[/code] [code]# 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版本下,每次运行效果可能不同):
[/code] [code]orange: 3
apple: 1
banana: 2
复制代码
示例 2: Python 3.7+ 中的 dict
[/code] [code]# 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}")
复制代码
输出效果:
[/code] [code]apple: 1
banana: 2
orange: 3
复制代码
示例 3: Python 3.6 中使用 OrderedDict
[/code] [code]# 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 的顺序保持
[/code] [code]# 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)
复制代码
输出效果:
[/code] [code]apple
banana
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