在 Python 的哪个版本之后,字典的添加顺序与键的顺序是一致的?

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


在 Python 的不同版本中,字典(dict)类型的行为发生了显著变化。在 Python 3.6 及之前的版本中,字典是无序的,这意味着字典在遍历时不能保证按照元素添加顺序输出。不过,从 Python 3.6 版本开始,字典的行为发生了改变,它开始保留键值对在添加时的顺序。这一变化在 Python 3.7 及以后的版本中得到了进一步的确认和官方支持,使得字典类型成为有序的。

具体来说,Python 3.6 开始字典保留了键值对的添加顺序,但这一特性在 Python 3.6 版本时被视为 Python 实现的一个细节,并非语言的正式特性。到了 Python 3.7 版本,字典的有序性则被正式确认为字典类型的一个特性,这意味着在 Python 3.7 及以后的版本中,当你遍历字典时,可以预期它们会按照元素插入的顺序输出

然而,尽管 Python 3.6 版本起字典已经具备有序性,但值得注意的是,Python 3.7 版本通常被视为字典正式变为有序的起点,在多数文档和讨论中均有所体现。这是因为 Python 3.6 中的有序性最初并非设计为确保的语言特性,而是实现细节带来的结果。直到 Python 3.7,有序性才被明确纳入语言规范,因此在讨论字典添加顺序与键顺序的一致性时,人们通常会提及 Python 3.7 版本作为该特性的正式引入点。

总结而言,尽管从 Python 3.6 开始,字典已经能够保持元素的添加顺序,但直到 Python 3.7 版本,这一特性才被正式确认并广泛宣布为语言的标准特性。因此,若需确保字典的添加顺序与键的顺序一致,推荐使用 Python 3.7 及更高版本。

在 Python 3.7 以及更高版本中,字典是有序的,这意味着字典中的元素会按照被添加到字典中的顺序来维护,这是通过内部实现的改变实现的。以下是三个示例,展示了如何利用这一特性。

示例 1:基本添加

# 创建一个空字典
my_dict = {}# 按顺序添加键值对
my_dict['a'] = 1
my_dict['b'] = 2
my_dict['c'] = 3# 打印字典以查看其内容和顺序
print(my_dict)  # 输出: {'a': 1, 'b': 2, 'c': 3}# 遍历字典并打印键值对,以验证顺序
for key, value in my_dict.items():print(f"{key}: {value}")
# 预期输出:
# a: 1
# b: 2
# c: 3

示例 2:更新已有键值

# 创建一个初始字典
my_dict = {'a': 1, 'b': 2, 'c': 3}# 更新一个已存在的键的值,并添加一个新键值对
my_dict['a'] = 'updated'
my_dict['d'] = 'new'print(my_dict)  # 输出: {'a': 'updated', 'b': 2, 'c': 3, 'd': 'new'}# 遍历并打印,验证更新后的顺序保持不变,新元素在末尾
for key, value in my_dict.items():print(f"{key}: {value}")
# 预期输出:
# a: updated
# b: 2
# c: 3
# d: new

示例 3:通过构造函数创建有序字典

# 使用列表包含元组的方式直接在构造函数中创建有序字典
my_dict = dict([('a', 1), ('b', 2), ('c', 3)])print(my_dict) # 输出: {'a': 1, 'b': 2, 'c': 3}# 添加更多元素以验证顺序保持一致性
my_dict['d'] = 4for key, value in my_dict.items():print(f"{key}: {value}")
# 预期输出:
# a: 1
# b: 2
# c: 3
# d: 4

运行结果如下:

在这里插入图片描述

上述示例详细展示了在 Python 中如何按照添加顺序操作和维护字典。从 Python 3.7 版本开始,官方文档已明确指出字典具有有序性,因此,您可以放心地依赖这一特性进行编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构十三:八大排序算法

排序算法(sorting algorithm)是用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用,因为有序数据通常能够被更高效地查找、分析和处理。排序算法中的数据类型可以是整数、浮点数、字符或字符串等。排序的判断规则可根据需求设定&am…

Python基础详解四

一,Json解析 字典转换为JSON: import jsondata [{"name":"袁震","age":20},{"name":"张三","age":21},{"name":"李四","age":22}] str json.dumps(data) …

Linux(centos7)系统配置 ntpd服务设置时间同步

一 、应用场景 两台服务器,要求使他们时间同步,有人问为什么要时间同步?如果一个集群中,时间相差很大,那么会出现很多诡异的问题,你也不想在一个无法解决的问题上浪费几天时间吧!总之,设置服务器之间时间同步,为了避免很多问题的发生! ntpd(Network Time Protocol …

【第20章】spring-mvc之定时任务

文章目录 前言一、开启1. 打开开关2. 定时任务类3. 执行结果 二、定时任务线程池1.定义线程池2.开启异步3. 定时任务类4. 执行结果 三、cron总结 前言 定时任务是项目中比较常见的功能,常用于定时发送消息、拉取数据、数据备份等; 为什么要放到SpringM…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 (四) 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第三部分:工具使用 工具的使用是人类的一个显着而显着的特征。我们创造、修改和利用外部物体来完成超…

20240511,谓词,内建函数对象

拜托铠甲勇士真的帅好不好!!! STL案例2-员工分组 10个员工,指派部门,员工信息(姓名,工资组成,部门:策划,美术,研发),随机…

【gpedit.msc】组策略编辑器的安装,针对windows家庭版,没有此功能

创建一个记事本文件然后放入以下内容 echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txtdir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-…

SSM【Spring SpringMVC Mybatis】——Mybatis

目录 1、初识Mybatis 1.1Mybatis简介 1.2 官网地址 2、搭建Mybatis框架 2.1 准备 2.2 搭建Mybatis框架步骤 1. 导入jar包 2. 编写核心配置文件【mybatis-config.xml】 3. 书写相关接口及映射文件 4. 测试【SqlSession】 2.3 添加Log4j日志框架 导入jar包 编写配置文…

ERA5数据的区别

ERA5 hourly data on single levels from 1940 to present 链接 ERA5是欧洲中期天气预报中心(ECMWF)的第五代全球气候和天气再分析产品,涵盖过去80年的数据。数据可从1940年开始获取,ERA5取代了ERA-Interim再分析产品。 再分析将全球范围内的模型数据与…

详解drop,delete,truncate区别

在SQL中,"DROP"、"DELETE"和"TRUNCATE"是用于删除数据的不同命令,它们之间有一些重要的区别: DROP: DROP用于删除数据库对象,例如删除表、视图、索引、触发器等。使用DROP删除的对象将…

27.哀家要长脑子了!---栈与队列

1.739. 每日温度 - 力扣(LeetCode) 用单调栈的方法做: 从左到右遍历数组: 栈中存放的是下标,每个温度在原数组中的下标,从大到小排列,因为这样才能确保的是最近一天的升高温度 如果栈为空&am…

Vue面试经验2

Vue 你说你在vue项目中实现了自定义指令,如何实现 全局指令在main.js入口文件中实现 使用方法:v-指令名称 每个钩子函数都有两个参数(ele,obj) ele:绑定指令的元素 obj:指令的一些信息(比如绑定指令的值&#xff0c…

虚表,虚函数习题

6. 关于虚表说法正确的是(d ) A:一个类只能有一张虚表 多重继承 B:基类中有虚函数,如果子类中没有重写基类的虚函数,此时子类与基类共用同一张虚表 即使子类重写了基类的虚函数,此时子类与…

探索生产者/消费者模式:解决并发编程中的资源竞争

序言 在并发编程中,资源竞争是一个常见的问题。为了有效地管理资源并确保线程安全,需要采用一些有效的方法。其中之一是生产者/消费者模式,它是一种经典的并发设计模式,用于解决生产者和消费者之间的协作问题。本文将深入探讨生产…

Ansible playbook

playbook playbook介绍 playbooks是ansible用于配置,部署,和管理被控节点的剧本。通过playbooks的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbooks是由一个或多个”play”组成的列表。 当对一台机器做环境初…

conan2 基础入门(02)-安装

conan2 基础入门(02)-安装 文章目录 conan2 基础入门(02)-安装⭐前言⭐安装python安装安装包安装自行操作 ⭐验证配置环境变量命令行验证conan配置文件 END ⭐前言 Conan 2.0: C and C Open Source Package Manager 官方提供三种安装conan的方式。分别为: Recommen…

Vue3:路由

1. 路由简介 在Vue3中,路由是一个核心概念,特别是在构建单页面应用程序(SPA)时。以下是Vue3中路由的基本概念: 1. **路由(Route)**:在Vue3中,路由是指根据特定的规则将用…

行业新应用:电机驱动将成为机器人的动力核心

电机已经遍布当今社会人们生活的方方面面,不仅应用范围越来越广,更新换代的速度也日益加快。按照工作电源分类,可以将它划分为直流电机和交流电机两大类型。直流电机中,按照线圈类型分类,又可以分为有铁芯的电机、空心…

ARM单片机实现流水灯(GD32)

根据上图可知使用的引脚分别是PA8,PE6,PF6流水灯功能的实现要分别初始化这几个引脚 流水灯实现 编写流水灯代码 LED.C #include "gd32f30x.h" // Device header #include "Delay.h" // 初始化LED灯 void LED_Init(void){// 使能RCU时钟…

记录一次pods 导入 SocketRocket库的经历

折腾一上午,brew 安装成功了 cococapod 然后项目启动下载一个SocketRocket库 下载成功后总是报错: 睡了2个多小时,我在qq就交流群里求助: 终于把项目管理,在命令行里执行这句: open chat_app.xcworkspace…