3 python基本语法 - Dict 字典
Python 中字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。
1 字典的创建
1.1 通过大括号 {} 创建字典。
由于字典中每个元素都包含两部分,分别是键(key)和值(value),因此在创建字典时,键和值之间使用冒号 : 分隔,相邻元素之间使用逗号 , 分隔,所有元素放在大括号 {} 中,格式为:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
其中 dictname 表示字典变量名,keyn : valuen 表示各个元素的键值对;字典的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行,字典的值可以是 Python 支持的任意数据类型。
dict1 = {"年龄": 20, "姓名": "小明"}
print(type(dict1))
dict2 = {1: 20, 2: 30, 3: "六十"}
print(type(dict2))
dict3 = {1: (1, 2, 3), 2: [1, 2, 3], 3: "六十"}
print(type(dict3))
'''
<class 'dict'>
<class 'dict'>
<class 'dict'>
'''
1.2 通过 fromkeys 函数创建字典
Python 中,可以使用 dict 字典类型提供的 fromkeys 函数创建带有默认值的字典,语法格式为:
dictname = dict.fromkeys(list,value=None)
其中,list 参数表示字典中所有键的列表(list),value 参数表示默认值,如果不写,则为空值 None。
list1 = ["语文", "数学", "英语"]
dict1 = dict.fromkeys(list1)
print(dict1)
dict2 = dict.fromkeys(list1, 90)
print(dict2)
'''
{'语文': None, '数学': None, '英语': None}
{'语文': 90, '数学': 90, '英语': 90}
'''
1.3 通过 dict 函数创建字典
- 向 dict 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值:
demo1 = [('two', 2), ('one', 1), ('three', 3)]
demo2 = [['two', 2], ['one', 1], ['three', 3]]
print(dict(demo1))
print(dict(demo2))
'''
{'two': 2, 'one': 1, 'three': 3}
{'two': 2, 'one': 1, 'three': 3}
'''
- 通过应用 dict 函数和 zip 函数,可将两个列表、元组、集合、字符串,甚至还可以将 range
区间转换为对应的字典,语法格式为:dictname = dict(zip(keys, values) ):
keys1 = ["two", "one", "three"]
values1 = (2, 1, 3)
values2 = range(0, 3)
dict1 = dict(zip(keys1, values1))
dict2 = dict(zip(keys1, values2))
print(dict1)
print(dict2)
'''
{'two': 2, 'one': 1, 'three': 3}
{'two': 0, 'one': 1, 'three': 2}
'''
2 字典的访问
2.1 直接访问
因为字典中的元素是无序的,每个元素的位置都不固定,所以字典也不能像列表和元组那样,采用切片的方式一次性访问多个元素。字典可以通过键来直接访问对应的值,语法格式为:dictname[key]
,其中,dictname 表示字典变量的名字,key 表示键名,注意,键必须是存在的,否则会抛出异常。
2.2 通过 get 函数访问
Python 更推荐使用 dict 类型提供的 get 函数来获取指定键对应的值。当指定的键不存在时,get 函数不会抛出异常,语法格式为:dictname.get(key_obj, defaultvalue)
,其中,dictname 表示字典变量的名字;key_obj 表示指定的键;defaultvalue 用于指定要查询的键不存在时,此方法返回的默认值,如果不手动指定,会返回 None。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
print(dict1["语文"])
print(dict1["物理"])
print(dict1.get("语文"))
print(dict1.get("物理"))
print(dict1.get("物理", "值不存在"))
'''
85
Traceback (most recent call last):File "D:\code\pythonDev\test\main.py", line 3, in <module>print(dict1["物理"])
KeyError: '物理'
'''
2.3 通过 setdefault 函数访问
Python 字典中 setdefault 函数可以使用指定的键返回项目的值,和 get 函数类似, 如果键不存在于字典中,将会添加键并将值设为默认,语法格式为:dictname.setdefault(key_obj, defaultvalue)
其中, dictname 表示字典名称,key_obj 表示目标键值对对应的键,defaultvalue 表示默认值(可以不写,不写的话是 None),当指定的 key_obj 不存在时,setdefault 函数会先为这个不存在的 key_obj 设置一个默认的 defaultvalue,然后再返回 defaultvalue,如果该 key_obj 存在,那么直接返回该 key_obj 对应的 value。
dict1 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
print(dict1.setdefault("one"))
dict2 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
print(dict2.setdefault("one", 0))
dict3 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
print(dict3.setdefault("four"))
dict4 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
print(dict4.setdefault("four", 400))
print(dict4.get("four"))
'''
100
100
None
400
400
'''
2.4 字典中键值对的添加
为字典添加新的键值,直接给不存在的 key 赋值即可,语法格式为:
dictname[key_new] = value_new
其中,dictname 表示字典名称,key_new 表示新的键,value_new 表示新的值,只要是 Python 支持的数据类型都可以。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
dict1["物理"] = 86
print(dict1)
'''
{'语文': 85, '数学': 96, '英语': 92, '物理': 86}
'''
2.5 字典中键值对的修改
Python 字典中键(key)的名字不能被修改,只能修改值(value)。字典中各元素的键必须是唯一的,因此,如果新添加元素的键与已存在元素的键相同,那么键所对应的值就会被新的值替换掉,以此达到修改元素值的目的。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
dict1["数学"] = 100
print(dict1)
# ==> {'语文': 85, '数学': 100, '英语': 92}
2.6 字典的删除和字典中键值对的删除
字典的删除:和删除列表、元组一样,手动删除字典也可以使用 del 语句,语法格式为:del dictname,其中,dictname 表示要删除的字典名称。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
del dict1
print(dict1)
'''
Traceback (most recent call last):File "D:\code\pythonDev\test\main.py", line 3, in <module>print(dict1)
NameError: name 'dict1' is not defined
'''
字典中键值对的删除:
- del 语句
如果要删除字典中的键值对,还是可以使用 del 语句,语法格式为:del dictname[key_obj],其中dictname 表示字典名称,key_obj 表示要删除的目标键值对的键名。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
del dict1["语文"]
print(dict1)
# ==> {'数学': 96, '英语': 92}
- pop 函数
pop 函数用来删除指定的键值对,语法格式为:dictname.pop(key_obj),其中,dictname 表示字典名,key_obj 表示字典中要删除的指定键值对的键名。
- popitem 函数
popitem 函数用来删除字典中最后一个键值对,语法格式为:dictname.popitem(),其中,dictname 表示字典名。
dict1 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
dict1.pop("one")
print(dict1)
dict2 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
dict2.popitem()
print(dict2)
'''
{'two': 200, 'three': [100, 200, 300]}
{'one': 100, 'two': 200}
'''
2.7 判断字典中是否存在指定键值对
如果要判断字典中是否存在指定键值对,首先应判断字典中是否有对应的键。判断字典是否包含指定键值对的键,可以使用 in 或 not in 运算符,需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的,语法格式为:key_obj in dictname
,其中,key_obj 表示要查找的目标键值对的键名,dictname 表示字典名,如果存在,返回 True,如果不存在,返回 False。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
print("语文" in dict1)
print("物理" in dict1)
'''
True
False
'''
2.8 字典的遍历
- 通过 for 循环遍历
for 循环有两种方法可以遍历字典中的键值对,语法格式为:
# 第一种方法
for key in dictname:print(key, dictname[key])
# 第二种方法
for key,value in dictname.items():print(key, value)
其中,dictname 表示字典名,key 表示列表中键值对对应的键,value 表示列表中键值对对应的值。
dict1 = {'语文': 85, '数学': 96, '英语': 92}
for key in dict1:print(key, dict1[key])
for key, value in dict1.items():print(key, value)
'''
语文 85
数学 96
英语 92
'''
- 通过 keys 函数遍历
keys 函数用于返回字典中的所有键(key),语法格式为:dictname.keys()
- 通过 values 函数遍历
values 函数用于返回字典中所有键对应的值(value),语法格式为:dictname.values()
- 通过 items 函数遍历
items 函数用于返回字典中所有的键值对(key-value),语法格式为:dictname.items()
2.9 字典的复制(拷贝)
copy 函数返回一个字典的拷贝,也即返回一个具有相同键值对的新字典,语法格式为:dictname.copy()
a = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
b = a.copy()
print(b)
# ==> {'one': 100, 'two': 200, 'three': [100, 200, 300]}
注意,copy 函数所遵循的拷贝原理,既有深拷贝,也有浅拷贝。拿拷贝字典 a 为例,copy 函数只会对最表层的键值对进行深拷贝,也就是说,它会再申请一块内存用来存放 {‘one’: 1, ‘two’: 2, ‘three’: []};而对于某些列表类型的值来说,此方法对其做的是浅拷贝,也就是说,b 中的 [100, 200, 300] 的值不是自己独有,而是和 a 共有。
a = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
b = a.copy()
# 向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。
a['four'] = 100
print(a)
print(b)
# 由于 b 和 a 共享[100,200,300](浅拷贝),因此移除 a 中列表中的元素,也会影响 b。
a['three'].remove(100)
print(a)
print(b)
'''
{'one': 100, 'two': 200, 'three': [100, 200, 300], 'four': 100}
{'one': 100, 'two': 200, 'three': [100, 200, 300]}
{'one': 100, 'two': 200, 'three': [200, 300], 'four': 100}
{'one': 100, 'two': 200, 'three': [200, 300]}
'''
2.10 字典的更新
update 函数可以使用一个字典所包含的键值对来更新己有的字典,在执行 update 函数时,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去,语法格式为:dictname.update(dict_obj)
,其中,dict_obj 表示包含需要更新键值对的字典,dictname 表示需要被更新的字典。
dict1 = {'one': 100, 'two': 200, 'three': [100, 200, 300]}
dict2 = {'one': 100, 'two': 300, 'four': 400}
dict1.update(dict2)
print(dict1)
# ==> {'one': 100, 'two': 300, 'three': [100, 200, 300], 'four': 400}
相关文章:

3 python基本语法 - Dict 字典
Python 中字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们…...

Magnific AI:彻底改变 AI 生成图像的升级
在我最近与 Magnific AI 的讨论中,我不仅感到惊讶,而且对该工具提供的质量和可能性着迷。我发现 Magnific AI 能够转换人工智能生成的图像(这些图像通常只能以低分辨率提供),尤其令人印象深刻,不仅在可打印…...

BKP 备份寄存器 RTC 实时时钟-stm32入门
这一章节我们要讲的主要内容是 RTC 实时时钟,对应手册,是第 16 章的位置。 实时时钟这个东西,本质上是一个定时器,但是这个定时器,是专门用来产生年月日时分秒,这种日期和时间信息的。所以学会了 STM32 的…...
1.1 数据结构-数据的表示
文章目录 1.1.1 二元关系及其性质:1.1.1.1 笛卡尔积:1.1.1.2 二元关系:持续更新当中 ....... 1.1.1 二元关系及其性质: 数据的基本单元称为额数据元素,数据是从客观事物的观测中的到的,数据元素并不是鼓励存在的,而是存在密切的联系,也因此才能表示和描述客观事物,数据元素之间…...
UNIX Linux系统 启动PPOCRLabel报错[已放弃 (核心已转储)]
参照官方教程安装后,启动PPOCRLabel报错:[已放弃 (核心已转储)] 官方链接地址:PPOCRLabelv2 $~ PPOCRLabel --lang ch QObject::moveToThread: Current thread (0x561534309430) is not the objects thread (0x56153929eac0). Cannot move to…...

前端开发中的webpack打包工具
前端技术发展迅猛,各种可以提高开发效率的新思想和框架层出不穷,但是它们都有一个共同点,即源代码无法直接运行,必须通过转换后才可以正常运行。webpack是目前主流的打包模块化JavaScript的工具之一。 本章主要涉及的知识点有&am…...
Mybatis配置-数据库厂商标识(databaseIdProvider)
MyBatis可以根据数据库供应商执行不同的语句。多数据库供应商支持是基于映射语句的databaseId属性。MyBatis将加载所有没有databaseId属性或具有与当前数据库匹配的databaseId属性的语句。如果找到具有和不具有databaseId的相同语句,则后者将被丢弃。要启用多供应商…...

【Java】使用递归的方法获取层级关系数据demo
使用递归来完善各种业务数据的层级关系的获取 引言:在Java开发中,我们通常会遇到层层递进的关系型数据的获取问题,有时是树状解构,或金字塔结构,怎么描述都行,错综复杂的关系在程序中还是可以理清的。 这…...

工业6轴机械臂运动学逆解(解析解)
工业6轴机械臂运动学逆解(解析解) 通常工业机械臂采用6旋转轴串连的形式,保证了灵活性,但为其运动学逆解(即已知机械臂末端的位姿 P P P,求机械臂各个旋转轴的旋转角)带来了较大的困难ÿ…...

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜A/B
老规矩,看目录,平均3-5题 文章目录 A/B2023真题(2023-19)-A-选项特点:两个等号;-判断需联立的难易:难,看着感觉需要联立,所以判断联立需要有理论支撑,不然还…...
为什么GRU和LSTM能够缓解梯度消失或梯度爆炸问题?
1、什么是梯度消失(gradient vanishing)? 参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。 2、什么是梯度爆炸(gradient exploding)? 参数更新过小大,破坏了…...
【力扣100】146.LRU缓存
添加链接描述 class DLinkedNode:def __init__(self, key0, value0):self.key keyself.value valueself.prev Noneself.next Noneclass LRUCache:def __init__(self, capacity: int):self.cache dict()# 使用伪头部和伪尾部节点 self.head DLinkedNode()self.tail D…...

【Vue中给输入框加入js验证_blur失去焦点进行校验】
【Vue中给输入框加入js验证_blur失去焦点进行校验】 通俗一点就是给输入框加个光标离开当前文本输入框时,然后对当前文本框内容进行校验判断 具体如下: 1.先给文本框加属性 blur“validatePhoneNumber” <el-input v-model“entity.telephone” blur…...

vue3项目引入电子签名(可横屏竖屏)
实现效果:(左边横屏,右边竖屏) 前言:【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 :GitHub - linjc/smooth-signature: H5带笔锋手写签名,支持PC端和移动端,任何前…...
mysql中count(*)、count(1)、count(主键)、count(字段)的区别
文章目录 count函数的语义count(主键)count(1)count(*)count(字段)替代方案explain或者show table status中间表或者其他数据库计数 以下分析都是基于 select count(?) from table 这个语句来分析,不带过滤条件。 count函数的语义 count() 是一个聚合函数&#x…...
Nginx生成自签名证书从而添加域名的HTTPS访问
数字证书 ## 原理参考 https://mysticaldream.github.io/2023/05/certificate/## https://blog.csdn.net/m0_52440465/article/details/130713591 简介 数字证书是由证书颁发机构(CA)签名并颁发的电子文件,用于建立网络连接的身份认证和加密通信。SSL 证书是数字证书的一种。…...

无框架Java转go语言写http与tcp请求
项目地址 https://github.com/cmdch2017/http_tcpServer 项目结构 如何快速上手 http篇 1、controller包就相当于RestController,这里返回了一个Person对象,当你需要新建一个接口时,再新写一个func仿照下面的方法就行了 package control…...

【Git】Git基本操作
文章目录 Git 是什么Git 的优点Git 安装Linux UbuntuLinux CentOsWindows Git 基本操作1. 创建 Git 本地仓库2. 配置 Git3. Git工作区、暂存区和版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退 Git 是什么 Git是一个免费的、开源的分布式版本控制系统,…...

JavaSE学习笔记 Day20
JavaSE学习笔记 Day20 个人整理非商业用途,欢迎探讨与指正!! 上一篇 文章目录 JavaSE学习笔记 Day20十七、数据结构与算法17.1算法17.1.1冒泡排序17.1.2选择排序17.1.3插入排序17.1.4三个排序的区别 17.2顺序表17.2.1顺序表代码实现17.2.2顺…...

【蓝桥杯选拔赛真题52】python空调模式 第十四届青少年组蓝桥杯python 选拔赛比赛真题解析
目录 python空调模式 一、题目要求 1、编程实现 2、输入输出...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...