在 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'] = 4

for key, value in my_dict.items():
    print(f"{key}: {value}")
# 预期输出:
# a: 1
# b: 2
# c: 3
# d: 4

运行结果如下:

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图鸟模板-官网:基于Vue 3的前端开发新篇章

一、引言 随着前端技术的飞速发展,企业对于官网的需求也从简单的展示型网站向功能丰富、交互体验良好的方向转变。在这样的背景下,图鸟模板-官网以其基于Vue 3的纯前端开发特性,以及支持微信小程序、支付宝小程序、APP和H5的跨平台能力&…

【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟

你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟 文章目录 你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟一、概述二、CallerMemberNameAttribute类三、CallerFilePathAttribute 类四、CallerLineNumberAttribute 类…

每个初创企业创始人都应了解的搜索引擎优化基础知识

会话式AI引擎:如何革新您的业务通讯? 对于已经身兼数职的初创企业创始人来说,搜索引擎优化(SEO)似乎是一项艰巨的任务。然而,在数字时代,它是推动流量、建立品牌知名度和实现长期成功不可或缺的…

Golang编译优化——稀疏条件常量传播

文章目录 一、概述二、稀疏条件常量传播2.1 初始化worklist2.2 构建def-use链2.3 更新值的lattice2.4 传播constant值2.5 替换no-constant值 一、概述 常量传播(constant propagation)是一种转换,对于给定的关于某个变量 x x x和一个常量 c …

c++ 归并排序

归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序,然后将它们合并在一起以获得排序后的数组。 简单来说,归并排序的过程就是将数组分成两半,对每一半进行排序&#xff0c…

车辆运动模型中LQR代码实现

一、前言 最近看到关于架构和算法两者关系的一个描述,我觉得非常认同,分享给大家。 1、好架构起到两个作用:合理的分解功能、合理的适配算法; 2、好的架构是好的功能的必要条件,不是充分条件,一味追求架构…

贝壳面试:MySQL联合索引,最左匹配原则是什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL联合索引的认识? 2.在MySQ…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…

即插即用篇 | YOLOv8 引入多光谱通道注意力 | 频率领域中的通道注意力网络

本改进已集成到 YOLOv8-Magic 框架。 注意力机制,尤其是通道注意力,在计算机视觉领域取得了巨大成功。许多工作聚焦于如何设计高效的通道注意力机制,同时忽略了一个基本问题,即通道注意力机制使用标量来表示通道,这很困难,因为会造成大量信息的丢失。在这项工作中,我们从…

OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较

最近在与同事讨论BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound有什么区别。 一、从直觉上来说&#xff0c;BRepAlgoAPI_Fuse会对两个实体相交处理&#xff0c;相交的部分会重新的生成相关的曲面。而BRep_Builder.MakeCompound仅仅是把两个实体组合成一个新的实体&#xff0c;…

【一支射频电缆的诞生】GORE 戈尔

工具连接&#xff1a; https://microwave-cablebuilder.gore.com/ 控制参数&#xff1a; 连接器&#xff1a; 欣赏

Ubuntu18.04--虚拟机配置Samba并从Windows登录

前言&#xff1a; 本文记录我自己在Windows上安装 Virtualbox &#xff0c;并在Virtualbox中安装 Ubuntu-18.04 虚拟机&#xff0c;在Ubuntu-18.04虚拟机里安装配置Smaba服务器&#xff0c;从 Windows 宿主系统上访问虚拟机共享samba目录的配置命令。 引用: N/A 正文 虚拟…

《Python编程从入门到实践》day25

# 昨日知识点回顾 如何创建多行外星人 碰撞结束游戏 创建game_stats.py跟踪统计信息 # 今日知识点学习 第14章 记分 14.1 添加Play按钮 14.1.1 创建Button类 import pygame.font# button.py class Button:def __init__(self, ai_game, msg):"""初始化按钮…

【GESP】2023年12月图形化二级 -- 小杨报数

小杨报数 【题目描述】 小杨需要从 1 1 1到 N N N报数。在报数过程中&#xff0c;小杨希望跳过 M M M的倍数。例如&#xff0c;如果 N 5 N5 N5&#xff0c; M 2 M2 M2&#xff0c;那么小杨就需要依次报出 1 1 1&#xff0c; 3 3 3&#xff0c; 5 5 5。 默认小猫角色和白色背…

zblog中用户中心-邀请码注册插件的导出功能补充

自己加了一个导出未使用的邀请码功能&#xff0c;可惜我不是入驻作者&#xff0c;没有权限发布&#xff0c;之前被一条大河拒了&#xff0c;他说我抄他代码&#xff0c;不给我过审还冷嘲热讽&#xff0c;我一气之下&#xff0c;就没继续申请了&#xff0c;话说我是专业搞java开…

Unity引擎是什么?有哪些优点

大家好&#xff0c;我是咕噜土豆&#xff0c;很高兴又和大家见面了。今天我们一起来了解一下Unity引擎和它有哪些优点。 首先带大家了解什么是Unity引擎 Unity引擎是一款由Unity Technologies开发的跨平台游戏开发引擎&#xff0c;广泛用于创建2D和3D游戏以及其他交互式内容&…

ADS1220芯片利用自身温度传感器测试自身温度

一、简介 ADS1220 内部集成了一个精密温度传感器&#xff0c;通过将寄存器的TS位置1可使能温度传感器模式。 在温度传感器模式下&#xff0c; 配置寄存器 0 的设置不产生任何影响&#xff0c;该器件使用内部基准进行测量&#xff0c;与所选基准电压源无关。 温度读数过程与模拟…

SELECT SUM用法和ZMM008入货登记号大于可入仓量

select sum 用法示例 入货登记号大于可入仓量 之前错误的写法

德国Dürr杜尔机器人维修技巧分析

在工业生产中&#xff0c;杜尔工业机器人因其高效、精准和稳定性而备受青睐。然而&#xff0c;即便是最精良的设备&#xff0c;也难免会出现Drr机械手故障。 一、传感器故障 1. 视觉传感器故障&#xff1a;可能导致机器人无法正确识别目标物&#xff0c;影响工作效率。解决方法…

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

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