学习python的第十天之数据类型——dict字典

学习python的第十天之数据类型——dict字典

Python 中的字典(Dictionary)是一个非常强大的内置数据类型,它用来存储键值对(key-value pairs)信息。字典是无序的,这意味着它们不会记录你添加键值对的顺序;然而,从 Python 3.7 开始,字典是按照插入顺序进行排序的,这是一种实现上的细节,但在 Python 3.6 以及更早的版本中并无此保证。字典中的键必须是唯一的,而值则可以是任何数据类型。

支持的数据类型:int, str, float, bool, complex, list, dictionary, tuple, set

特点:

  1. 以键值对保存
  2. 键不能重复,不能更改,但值可以
  3. 字典没有下标,因为底层实现也是哈希表

创建字典

可以使用大括号 {} 和冒号 : 来创建一个字典。

# 创建一个空字典
my_dict = {}
print(my_dict)  # 输出: {}

使用 dict() 构造函数:

my_dict = dict()
print(my_dict)  # 输出: {}

或者传入一个包含元组的列表,每个元组代表一个键值对:

my_dict = dict([('name', 'John'), ('age', 30), ('city', 'New York')])
print(my_dict)  # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}
# 创建一个包含一些键值对的字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York', 'high': 1.75, 'list': [1,2,3], 'tuple': (4,5,6), 'dic': {'1': 1}, 'set': {7,8,9}}
print(my_dict)
# 输出: {'name': 'Alice', 'age': 25, 'city': 'New York', 'high': 1.75, 'list': [1, 2, 3], 'tuple': (4, 5, 6), 'dic': {'1': 1}, 'set': {8, 9, 7}}

字典的key键必须是不可变的数据类型,如int,str,float,tuple,bool

# 创建一个包含一些键值对的字典
my_dict = {'one': 1, 2: 'two', 3.0: 3, (4,): 'four', True: 5}
print(my_dict)
# 输出: {'one': 1, 2: 'two', 3.0: 3, (4,): 'four', True: 5}

访问字典中的值

可以通过键来访问字典中的值。

如果尝试访问一个不存在的键,Python 会抛出一个 KeyError

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}# 访问字典中的值
name = my_dict['name']  # 输出 'Alice'
age = my_dict['age']    # 输出 30# 使用get()方法访问字典中的值
city = my_dict.get('city')  # 输出 'New York'job = my_dict.get('job')
print(job)  # 输出 'None'country = my_dict.get('country', 'Unknown')
print(country)  # 输出 'Unknown',因为'country'键不存在

添加或修改字典

当键值存在时,可以通过键名来修改字典中的值:

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
my_dict['age'] = 31
print(my_dict)  # 输出: {'name': 'John', 'age': 31, 'city': 'New York'}

当键值不存在时,可以通过键名来添加字典中的键值对:

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
my_dict['job'] = 'Teacher'
print(my_dict)  # 输出: {'name': 'John', 'age': 30, 'city': 'New York', 'job': 'Teacher'}

删除字典中的元素

可以使用 del 语句或者 pop() 方法来删除字典中的元素:

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
del my_dict['city']  # 删除键是 'city' 的键值对
print(my_dict)  # 输出: {'name': 'John', 'age': 30}value = my_dict.pop('age')  # 删除键是 'age' 的键值对,并返回其值
print(my_dict)  # 输出: {'name': 'John'}

可以使用 popitem() 方法来删除字典中的随机元素:

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
value = my_dict.popitem()
print(my_dict)  # 输出: {'name': 'John', 'age': 30}

字典的遍历

可以遍历字典的键、值或者键值对:

  • 遍历键:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for key in my_dict:print(key)
# name
# age
# city
  • 或者:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for key in my_dict.keys():print(key)
# name
# age
# city
  • 遍历值:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for value in my_dict.values():print(value)
# John
# 30
# New York
  • 遍历键值对:
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
for key, value in my_dict.items():print(key, value)
# name John
# age 30
# city New York

字典的常用函数

  1. 返回所有键的列表
  • keys():返回字典中所有键的视图对象。这个视图对象会随字典的改变而改变,但它本身并不支持任何修改操作(比如添加或删除键)。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
keys = my_dict.keys()
print(keys)  # 输出: dict_keys(['name', 'age', 'city'])
  1. 返回所有值的列表
  • **values()**‌:返回字典中所有值的视图对象。与keys()类似,这个视图对象也会随字典的改变而改变,但不支持修改。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
values = my_dict.values()
print(values)  # 输出: dict_values(['Alice', 30, 'New York'])
  1. 返回所有键值对的元组列表。
  • **items()**‌:返回字典中所有键值对的视图对象(一个列表),每个键值对都是一个元组做为列表的一个元素。这个视图对象同样会随字典的改变而改变,但不支持修改。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
items = my_dict.items()
print(items)  # 输出: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])
  1. 更新字典
  • **update(other_dict)**‌:用other_dict中的键值对来更新当前字典。如果other_dict中的键在当前字典中已经存在,则对应的值会被替换;如果不存在,则新的键值对会被添加到当前字典中。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York', 'job': 'Teacher'}
other_dict = {'age': 25, 'job': 'Engineer'}
my_dict.update(other_dict)
print(my_dict)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York', 'job': 'Engineer'}
  1. 获取键的值
  • **get(key, default)**‌:获取字典中指定键的值。如果键不存在,则返回指定的默认值,而不是抛出KeyError
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
age = my_dict.get('age', 0)  # 键'age'存在,返回其值30
print(age)  # 输出: 30country = my_dict.get('country', 'Unknown')  # 键'country'不存在,返回默认值'Unknown'
print(country)  # 输出: Unknown
  1. 为字典中的某个键设置一个默认值
  • setdefault(key, default):如果键不存在于字典中,则添加键并将默认值设为其值;如果键已经存在,则返回该键的值,而不改变字典。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
hobby = my_dict.setdefault('hobby', 'Reading')  # 键'hobby'不存在,添加并返回默认值'Reading'
print(hobby)  # 输出: Reading
print(my_dict)  # 输出: {'name': 'Alice', 'age': 30, 'city': 'New York', 'hobby': 'Reading'}name = my_dict.setdefault('name', 'Bob')  # 键'name'存在,返回其值'Alice'而不改变字典
print(name)  # 输出: Alice
  1. 检查一个键是否存在于字典中
  • innot in‌:这两个操作符用于检查一个键是否存在于字典中。in 返回 True 如果键在字典中,否则返回 Falsenot in 则相反。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print('name' in my_dict)  # 输出: True
print('job' not in my_dict)  # 输出: True
  1. 检查一个键的值是否存是某个值(只能用于判断值,不能判断键)
  • isis not:这两个操作符用于检查一个键是否存在于字典中。is 返回 True 如果键在字典中,否则返回 Falseis not 则相反。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(my_dict['name'] is 'Alice')  # 输出: True
print(my_dict['age'] is not 'age')  # 输出: True
  1. 字典展开运算符
  • 在Python 3.5及以上版本中,** 可以作为字典展开运算符使用。它允许你将一个字典的内容展开为关键字参数传递给函数,或者将两个字典合并成一个新字典。
# 作为关键字参数传递
def print_kwargs(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")my_dict = {'a': 1, 'b': 2}
print_kwargs(**my_dict)  # 输出: a: 1 b: 2
# 合并字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict)  # 输出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
  1. 字典并集运算符,Python 3.9及以上版本
  • 在Python 3.9中引入了一个新的字典并集运算符 |,它允许你以更简洁的方式合并两个字典。如果两个字典中有相同的键,那么结果字典中将包含后一个字典中的值。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged_dict = dict1 | dict2
print(merged_dict)  # 输出: {'a': 1, 'b': 3, 'c': 4}
  1. 字典推导式
  • 字典推导式是Python中的一种简洁且强大的语法,允许你快速创建新字典。它通常结合 for 循环和条件语句使用,可以遍历一个序列或可迭代对象,并根据每个元素生成一个新的键值对。
# 创建一个新字典,其中键是原字典的键,值是原字典值的平方
original_dict = {'a': 1, 'b': 2, 'c': 3}
squared_dict = {k: v**2 for k, v in original_dict.items()}
print(squared_dict)  # 输出: {'a': 1, 'b': 4, 'c': 9}
  • 字典推导式还可以包含条件,以过滤掉某些键值对:
# 创建一个新字典,只包含值大于1的键值对
original_dict = {'a': 1, 'b': 2, 'c': 3}
filtered_dict = {k: v for k, v in original_dict.items() if v > 1}
print(filtered_dict)  # 输出: {'b': 2, 'c': 3}
  1. 获取字典长度
  • len() 函数用于返回对象中项目的数量。当len()函数作用于字典(dict)时,它返回的是字典中键值对的数量,也就是字典的长度。
# 创建一个字典
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}# 使用len()函数获取字典的长度
dict_length = len(my_dict)# 打印字典的长度
print(dict_length)  # 输出: 3

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

20 轮转数组

20 轮转数组 20.1 轮转数组解决方案 class Solution { public:void rotate(vector<int>& nums, int k) {int n nums.size();k k % n; // 如果 k 大于数组长度&#xff0c;取模减少不必要的旋转// 第一步&#xff1a;反转整个数组reverse(nums.begin(), nums.end(…

字符串相关题解

目录 字母异位词 最长公共前缀 博主主页&#xff1a;东洛的克莱斯韦克-CSDN博客 字母异位词 49. 字母异位词分组 - 力扣&#xff08;LeetCode&#xff09; 这道题更像一道语法题&#xff0c;考察对容器的掌握情况。如果按题目要求去模拟&#xff0c;不仅要分析每个字符串&am…

【微软:多模态基础模型】(3)视觉生成

欢迎关注【youcans的AGI学习笔记】原创作品 【微软&#xff1a;多模态基础模型】&#xff08;1&#xff09;从专家到通用助手 【微软&#xff1a;多模态基础模型】&#xff08;2&#xff09;视觉理解 【微软&#xff1a;多模态基础模型】&#xff08;3&#xff09;视觉生成 【微…

CentOS8 启动错误,enter emergency mode ,开机直接进入紧急救援模式,报错 Failed to mount /home 解决方法

先看现场问题截图&#xff1a; 1.根据提示 按 ctrld 输入 root 密码&#xff0c;进入系统。 2. 在紧急模式下运行&#xff1a;journalctl -xe &#xff0c;查看相关日志&#xff0c;找到关键点&#xff1a; Failed to mount /home 3.接着执行修复命令&#xff1a; xfs_repa…

2024140读书笔记|《作家榜名著:生如夏花·泰戈尔经典诗选》——你从世界的生命的溪流浮泛而下,终于停泊在我的心头

2024140读书笔记|《作家榜名著&#xff1a;生如夏花泰戈尔经典诗选》——你从世界的生命的溪流浮泛而下&#xff0c;终于停泊在我的心头 《作家榜名著&#xff1a;生如夏花泰戈尔经典诗选》[印]泰戈尔&#xff0c;郑振铎译&#xff0c;泰戈尔的诗有的清丽&#xff0c;有的童真&…

lenovo联想ThinkBook 14 G5 ABP(21JE)原装出厂Windows11系统恢复镜像包下载

适用机型 &#xff1a;【21JE】 链接&#xff1a;https://pan.baidu.com/s/1FUjwN8ZeaQ9qr3kNalSkYg?pwdqasf 提取码&#xff1a;qasf 联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家、联想浏览…

MySQL 数据类型

数值类型 int类型 类型说明tinyint1字节&#xff0c;范围从-128到127&#xff08;有符号&#xff09;&#xff0c;0到255&#xff08;无符号&#xff09;smallint2字节&#xff0c;范围从-2^15到2^15-1&#xff08;有符号&#xff09;&#xff0c;0到2^16-1&#xff08;无符号…

【WPF】Prism学习(三)

Prism Commands 1.复合命令&#xff08;Composite Commanding&#xff09; 这段内容主要介绍了在应用程序中如何使用复合命令&#xff08;Composite Commands&#xff09;来实现多个视图模型&#xff08;ViewModels&#xff09;上的命令。以下是对这段内容的解释&#xff1a; …

用go语言后端开发速查

文章目录 一、发送请求和接收请求示例1.1 发送请求1.2 接收请求 二、发送form-data格式的数据示例 用go语言发送请求和接收请求的快速参考 一、发送请求和接收请求示例 1.1 发送请求 package mainimport ("bytes""encoding/json""fmt""ne…

SpringCloud Alibaba入门简介和Nacos服务注册和配置中心

前面已经把spring cloud相关的组件都一一学了个遍,现在有点小佩服自己…本来计划今天周末好好出去玩一圈,天气太热了,39了都,还是在办公室学习吧,进行下面的springCloud Alibaba 学习吧…不废话了赶快进入正体 1. SpringCloud Alibaba入门简介 1.1 why会出现SpringCloud alib…

如何让Excel公式中的参数实现动态引用

如果你想成为Excel函数高手&#xff0c;仅仅掌握VLOOKUP和Countif等函数是远远不够的&#xff0c;起码你得学会使用INDIRECT函数&#xff0c;熟练掌握INDIRECT函数能让你从一个初学者晋级为高手&#xff0c;学会它就好比孙悟空掌握了72般变化的基本功&#xff0c;你说厉不厉害。…

【流量分析】常见webshell流量分析

免责声明&#xff1a;本文仅作分享&#xff01; 对于常见的webshell工具&#xff0c;就要知攻善防&#xff1b;后门脚本的执行导致webshell的连接&#xff0c;对于默认的脚本要了解&#xff0c;才能更清晰&#xff0c;更方便应对。 &#xff08;这里仅针对部分后门代码进行流量…

车载诊断架构 --- 关于DTC的开始检测条件

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

掌握 Spring Boot 的最佳方法 – 学习路线图

在企业界&#xff0c;人们说“Java 永垂不朽&#xff01;”。但为什么呢&#xff1f;Java 仍然是开发企业应用程序的主要平台之一。大型公司使用企业应用程序来赚钱。这些应用程序具有高可靠性要求和庞大的代码库。根据Java开发人员生产力报告&#xff0c;62% 的受访开发人员使…

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节&#xff0c;首先需要考虑的是一块连续区域分配的过程&#xff0c;这个过程中会有很多问题&#xff0c;首先比较关注的一个问题是…

MySQL学习/复习3约束

一、表的常用约束 二、null、not null 三、默认值default 3.1default与null 四、注释commen 注意事项&#xff1a;desc查不到注释 五、zerofill 5.1填充0以控制宽度 六、primary_key 6.1复合主键 七、auto_increment 7.1last_insert_id() 八、unique 8.1unique与primary_key …

python视频编辑中的蒙版技术:创意与技术相结合

在数字视频编辑的世界里&#xff0c;蒙版技术是一种强大的工具&#xff0c;它允许我们在视频帧上进行精确的编辑和效果叠加。通过蒙版&#xff0c;我们可以控制哪些部分的视频内容被显示或隐藏&#xff0c;从而创造出各种视觉效果和过渡。在本文中&#xff0c;我们将探讨如何使…

文件操作和IO

目录 一. 文件预备知识 1. 硬盘 2. 文件 (1) 概念 (2) 文件路径 (3) 文件类型 二. 文件操作 1. 文件系统操作 [1] File常见的构造方法 [2] File的常用方法 [3] 查看某目录下所有的目录和文件 2. 文件内容操作 (1) 打开文件 (2) 关闭文件 (3) 读文件 (4) 写文件 …

PCB结构与组成

PCB板就是印制电路板&#xff0c;又称印刷电路板&#xff0c;是电子元器件电气连接的提供者。PCB板转化成我们所熟悉的电路板过程如下&#xff1a; 了解完定义&#xff0c;下面是我们电路板的标识 可简单的把PCB板拆分成六个部分&#xff1a;导线、铺铜、过孔、焊盘、丝印、阻焊…

OrienterNet在二维公共地图实现视觉定位的模型

论文来自MetaAI&#xff1a; https://arxiv.org/pdf/2304.02009https://arxiv.org/pdf/2304.02009github代码&#xff1a; https://github.com/facebookresearch/OrienterNet?tabreadme-ov-filehttps://github.com/facebookresearch/OrienterNet?tabreadme-ov-file 研究目…