在 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.rhkb.cn/news/324939.html

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

相关文章

笨方法自学python(一)

我觉得python和c语言有很多相似之处,如果有c语言基础的话学习python也不是很难。这一系列主要是学习例题来学习python;我用的python版本是3.12 代码编辑器我用的是notepad,运行py程序用cmd 现在开始写第一个程序: print ("…

GPT-SoVits:语音克隆,语音融合

首发网站 https://tianfeng.space 前言 零样本文本到语音(TTS): 输入 5 秒的声音样本,即刻体验文本到语音转换。少样本 TTS: 仅需 1 分钟的训练数据即可微调模型,提升声音相似度和真实感。跨语言支持&…

ESP32 + ST7789 LCD

1、准备 ESP32 单片机开发板 ST7789 LCD 模块(240 * 320 像素) 杜邦线 2、接线 LCD功能ESP32VCC 供电电压正极 3.3V 、 5V GND 供电电压负极 GNDIDN / MOSI SPI 接口数据 引脚 23CLK 串行接口时钟信号 18CS 芯片选择引脚;低电平有效 5DC 显…

【实战】采用jenkins pipeline实现自动构建并部署至k8s

文章目录 前言部署jenkins编写docker-compose-jenkins.yaml配置maven源启动jenkins解锁jenkins Jenkins默认插件及git、镜像仓库、k8s凭证配置host key verification configuration修改为不验证Gitee ssh阿里云镜像仓库ssh编写pipeline安装以下常用插件将kubectl命令文件拷贝到…

Threejs 动态修改InstanceMesh实例化几何体中单个实例的颜色

目录 InstanceMesh多实例 场景 思路 注意点 实现 效果 InstanceMesh多实例 instanceMesh 是使用InstancedMesh类来创建实例化的几何体。它适用于当需要大量重复的几何体时,但是每个实例之间有不同的变换属性(如位置、旋转、缩放等) 场…

windows使用Docker-Desktop部署lobe-chat

文章目录 window安装docker-desktop下载和启动lobe-chatAI大语言模型的选择lobe-chat设置大模型连接 window安装docker-desktop docker-desktop下载地址 正常安装应用,然后启动应用,注意启动docker引擎 打开右上角的设置,进入Docker Engine设…

【系统分析师】软件架构设计

文章目录 1、构件与软件复用1.1 主流构件标准1.2 构件获取与管理1.3 构件复用的方法 2、软件架构概述3、软件架构建模4、软件架构风格4.1 经典架构风格4.2 层次架构风格4.3 富互联网应用-RIA 5、面向服务的架构5.1 SOA概述5.2 SOA的关键技术5.3 SOA的实现方法 6、软件架构评估6…

Golang | Leetcode Golang题解之第83题删除排序链表中的重复元素

题目: 题解: func deleteDuplicates(head *ListNode) *ListNode {if head nil {return nil}cur : headfor cur.Next ! nil {if cur.Val cur.Next.Val {cur.Next cur.Next.Next} else {cur cur.Next}}return head }

前端开发工程师——ajax

express框架 终端输入 npm init --yes npm i express 请求报文/响应报文 // 1.引入express const express require(express);// 2.创建应用对象 const app express();// 3.创建路由规则 // request:是对请求报文的封装 // response:是对响应报文的封装 app.get(…

【数据结构】浅谈

✨✨✨专栏:数据结构 🧑‍🎓个人主页:SWsunlight 目录 一、概念: 二、物理结构: 1、顺序存储结构: 2、链式存储结构: 3、数据索引存储结构: 4、数据散列存储结构&#xf…

SVN 合并到 Git 时有文件大于 100 M 被限制 Push

如果有文件大小大于 100M,GitHub 是会被限制推送到仓库中的,大概率情况会显示下面的错误: remote: Resolving deltas: 100% (3601/3601), done. remote: error: Trace: aea1f450da6f2ef7bfce457c715d0fbb9b0f6d428fdca80233aff34b601ff59b re…

声明变量的六种方法

ES6 声明变量的六种方法 varfunctionletconstclassimport 顶层对象的属性 1. ES6 声明变量的六种方法 ES5 只有两种声明变量的方法: var 命令和 function 命令。 ES6 除了添加 let 和 const 命令,还有另外两种声明变量的方法: import 命令和…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时,你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…

Python专题:八、列表(1)

Python的内置数据类型 数据类型:列表 list类型 可以是字符串,浮点数,整数,列表 列表特性 ①集合性的数据类型 ②列表是有序的 ③列表是可更新的 访问列表元素的方式也是[索引],也是从0开始的,不能超过…

【前端】桌面版docker并部署前端项目

环境 win10专业版 2004 , 需科学 官网下载安装包并安装4.29.0版本 终端输入 wsl --installdocker桌面版和模拟器只能选一个,不然一直转圈圈 镜像配置加速,在settings—>docker engine下 {"builder": {"gc": {"defaultKee…

二叉树介绍

引入 定义 区别 定义不同 形态不同 基本形态

自动驾驶中的神经辐射场:综述

24年4月清华大学论文“Neural Radiance Field in Autonomous Driving: A Survey”。 神经辐射场(NeRF)由于其固有的优势,特别是其隐式表示和新视图合成能力,引起了学术界和工业界的广泛关注。 随着深度学习的快速发展&#xff0c…

攻防世界-web-unseping

题目 知识点 PHP代码审计PHP序列化和反序列化PHP中魔术方法命令执行绕过方式 解读源码 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function …

视频资源汇聚平台常见的几种接入方式

视频资源汇聚平台 视频汇聚平台可以实现海量资源的接入、汇聚、存储、处理、分析、运维等&#xff0c;平台具备轻量化接入能力&#xff0c;可支持多协议方式接入&#xff0c;包括主流标准协议GB28181、RTSP、ONVIF、RTMP、FLV、WEBSOCKET等&#xff0c;以及厂家私有协议与SDK接…

网络安全的未来:挑战、策略与创新

引言&#xff1a; 在数字化时代&#xff0c;网络安全已成为个人和企业不可忽视的议题。随着网络攻击的日益频繁和复杂化&#xff0c;如何有效保护数据和隐私成为了一个全球性的挑战。 一、网络安全的现状与挑战 网络安全面临的挑战多种多样&#xff0c;包括但不限于恶意软件、…