Python数据类型字典分析

文章目录

  • 1. 创建字典
    • 1.1 创建空字典
    • 1.2 创建非空字典
  • 2. 新增字典元素
    • 2.1 thisdict[new_key] = new_value
    • 2.2 update 方法
  • 3. 删除字典元素
  • 4. 查找字典元素
    • 4.1 in 和 in not 操作符
    • 4.2 get 方法
    • 4.3 thisdict[key]
  • 5. 修改字典元素
  • 6. 遍历字典元素
    • 6.1 for 循环遍历
    • 6.2 keys 方法
    • 6.3 values 方法
    • 6.4 items 方法
  • 7. 合并字典
    • 7.1 update 方法
  • 8. 字典的 key
  • 9. 其他方法
    • 9.1 copy 方法
    • 9.2 clear 方法
    • 9.3 fromkeys方法
    • 9.4 setdefault方法

1. 创建字典

  • 字典(dict)是一个无序、可变和有索引的集合,字典中不允许存在重复的成员。

1.1 创建空字典

  • 在 Python 中,{} 表示一个空字典
  • 可以通过 dict() 的方式来创建一个空字典
a = {}  
print(type(a)) # <class 'dict'>  
b = dict()  
print(type(b)) # <class 'dict'>

1.2 创建非空字典

  • 创建字典时可以在 {} 中设置字典的初始值。
a = {  'name':'siwen',  'time':2023  
}  
print(a) # {'name': 'siwen', 'time': 2023}
  • 字典是一种存储键值对的结构,键和值一一对应,根据键就能够快速找到其对应的值
  • 键值对之间使用 , 分割,键(key)和值(value)之间使用 : 分隔
  • 最后一个键值对的后面可以写 , 也可以不写

2. 新增字典元素

2.1 thisdict[new_key] = new_value

  • 通过 thisdict[key] = value 的方式可以将键值对 <key, value> 插入到字典 thisdict 中。
a = {  'name':'siwen',  'time':2023  
}  
print(a) # {'name': 'siwen', 'time': 2023}  
a['age'] = 22  
print(a) # {'name': 'siwen', 'time': 2023, 'age': 22}

2.2 update 方法

  • 使用 update 方法可以将多个键值对插入到字典中
a = {  'name':'siwen',  'time':2023  
}  
print(a) # {'name': 'siwen', 'time': 2023}  
a.update({'age': 22,'weight':123})  
print(a) # {'name': 'siwen', 'time': 2023, 'age': 22, 'weight': 123}

3. 删除字典元素

  • 使用 pop 方法可以删除指定键值(key)的键值对。
  • 使用 popitem 方法可以删除最后插入字典的键值对
a = {  'name':'siwen',  'time':2023  
}  a.pop('time')  
print(a) # {'name': 'siwen'}  a = {  'name':'siwen',  'time':2023  
}  
a.popitem()  
print(a) # {'name': 'siwen'}  
a.popitem()  
print(a) # {}

4. 查找字典元素

4.1 in 和 in not 操作符

  • 使用 in 和 in not 操作符能够判定指定的键值(key)是否在字典中存在
a = {  'name':'siwen',  'time':2023  
}  print('time' in a)      # True  
print('time' not in a)  # False  
print('name' in a)      # True  
print('name' not in a)  # False
  • in 和 in not 操作符只是判定 key 是否存在,与 value 无关

4.2 get 方法

  • 使用 get 方法可以获取指定键(key)的值(value)
a = {  'name':'siwen',  'time':2023  
}  
print(a.get('name')) # siwen  
print(a.get('hello'))# None
  • 如果指定的键(key)不存在,则 get 返回 None

4.3 thisdict[key]

  • 通过 thisdict[key] 的方式也可以获取指定键(key)的值(value)
a = {  'name':'siwen',  'time':2023  
}  
print(a['name']) # siwen  
#print(a['hello'])# 抛出异常

5. 修改字典元素

  • 通过 thisdict[key] = new_value 的方式可以修改指定键(key)的值(value)
a = {  'name':'siwen',  'time':2023  
}  
a['time'] = 1997  
print(a) #{'name': 'siwen', 'time': 1997}
  • 使用 [] 可以根据 key 来新增或修改 value,如果指定的 key 不存在,则为新增键值对,如果指定的 key 存在,则为修改键值对的值

6. 遍历字典元素

6.1 for 循环遍历

字典也是一个可迭代对象,因此可以直接使用 for 循环对字典进行遍历

  • 使用 for 循环对字典遍历时,实际上是在对字典中的 key 进行遍历
a = {  'name':'siwen',  'time':2023,  'age': 22  
}  for key in a:  print(key,a[key])  #name siwen  
#time 2023  
#age 22

6.2 keys 方法

  • 使用 keys 方法可以获取到字典中所有 key 所组成的列表
a = {  'name':'siwen',  'time':2023,  'age': 22  
}  for key in a.keys():  print(key,a[key])  
#name siwen  
#time 2023  
#age 22

6.3 values 方法

使用 values 方法可以获取到字典中所有 value 所组成的列表

a = {  'name':'siwen',  'time':2023,  'age': 22  
}  for value in a.values():  print(value)  
#siwen  
#2023  
#22

6.4 items 方法

  • 使用 items 方法可以获取到字典中所有键值对所组成的元组的列表
  • 代码中用 for 循环对 items 的返回值进行遍历,也就是对列表中的一个个元组在进行遍历,每次遍历时将元组中的键和值分别赋值给 key 和 value 变量
a = {  'name':'siwen',  'time':2023,  'age': 22  
}  for key,value in a.items():  print(key,value)  
#name siwen  
#time 2023  
#age 22

7. 合并字典

7.1 update 方法

  • 使用 update 可以将一个字典合并到另一个字典中
a = {  'name':'siwen',  'time':2023,  
}  
b = {  'age': 22  
}  
a.update(b)  
print(a) # {'name': 'siwen', 'time': 2023, 'age': 22}
print(b) # {'age': 22}

8. 字典的 key

  • 一个字典中存储的各个键值对的 key 可以是不同类型的
  • 但并不是所有的类型都可以作为字典的 key,因为字典本质上是一个哈希表,而哈希表的 key 要求是“可哈希的”,因此字典的 key 也必须是“可哈希的”,所谓的“可哈希”就是可以计算出一个哈希值。
  • 在 Python 中,使用 hash 函数可以计算某个对象的哈希值
  • 在 python 中有些类型是不能计算出对应的 hash 值,如 list, tuple,dict
print(hash(0))       # 0  
print(hash('a'))     # -510370993372095746  
print(hash(1.1))     # 230584300921369601  
print(hash((1,2,3))) # 529344067295497451#以下都会抛异常
print(hash([1,2]))  
print(hash({1,2}))  
print(hash({'1':1,'2':2}))

9. 其他方法

9.1 copy 方法

  • copy 属于浅拷贝
  • 浅拷贝会复制字典的键和值的引用,但不会递归复制内部嵌套的对象
a = {  'name':'siwen',  'time':2023,  
}  
b = {  'age': 22  
}  
a = b.copy() #浅拷贝    浅拷贝会复制字典的键和值的引用,但不会递归复制内部嵌套的对象。  
print(a)     # {'age': 22}
  • 注意
a = {  'name':'siwen',  'time':2023,  
}  
b = {  'age': 22  
}  b = a # b 字典成为了 a 字典的引用  
a['name'] = 'test'  print(a) # {'name': 'test', 'time': 2023}  
print(b) # {'name': 'test', 'time': 2023}
  • 实现深拷贝
  • 导入 copy 模块,使用 copy.deepcopy 方法
import copy # 导入copy模块  a = {  'name':'siwen',  'time':2023,  
}  
b = {  'age': 22  
}  
b = copy.deepcopy(a) # 深拷贝  
print(a)    # {'name': 'siwen', 'time': 2023}  a['name'] = 'test'  
print(a)    # {'name': 'test', 'time': 2023}  
print(b)    # {'name': 'siwen', 'time': 2023}

9.2 clear 方法

a = {  'name':'siwen',  'time':2023,  
}  
a.clear()  
print(a) # {}

9.3 fromkeys方法

  • fromkeys(keys, value):这个方法返回一个新的字典,其中包含指定的键 keys 和对应的值 value。其中,keys 是一个可迭代的对象,用于指定新字典中的键,value 是用于指定新字典中所有键对应的初始值。
keys = ['a', 'b', 'c']  
value = 0  
new_dict = dict.fromkeys(keys, value)  
print(new_dict)  # {'a': 0, 'b': 0, 'c': 0}keys = ['a', 'b', 'c']  
values = {1,2,3}  
new_dict = dict.fromkeys(keys, values)  
print(new_dict)  # {'a': {1, 2, 3}, 'b': {1, 2, 3}, 'c': {1, 2, 3}}

9.4 setdefault方法

  • setdefault(key, default=None)
  • 这个方法返回指定键 key 对应的值。如果字典中已经存在键 key,则返回该键对应的值;如果字典中不存在键 key,则将键 key 插入字典,并将其值设为 default(默认为 None),然后返回 default
my_dict = {'a': 1, 'b': 2}
value = my_dict.setdefault('c', 3)
print(my_dict)  # {'a': 1, 'b': 2, 'c': 3}
print(value)  # 3
```![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6306c5b7f9244d9bac3cd20e7e7c2f09.png)

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

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

相关文章

使用纯js码2个实用功能banner图标切换和表格制作

“I can accept failure, but I cant acceptnot trying.”—— by Michael Jordan    “我可以接受失败&#xff0c;但我不能接受放弃。” ——迈克尔•乔丹   banner图标切换 js原生&#xff1a;图片地址你们自己设置位置&#xff0c;相对位置或者绝对位置即可 <!DOCTY…

【CTA认证】Android8实现android6以下的应用运行时也要申请权限

需求 CTA入网认证&#xff0c;要求低版本比如Android6以下的应用&#xff0c;运行时&#xff0c;也需要有运行时权限(Runtime Permission)功能&#xff0c;不能默认就取到权限&#xff0c;必须人工在设置中打开才可。 环境 Android 8 实现 frameworks 修改思路是所有APP都…

蓝桥杯物联网竞赛_STM32L071_6_RTC显示

作用&#xff1a; RTC在STM32微控制器中通常由一个独立的低功耗晶振和相关的寄存器组成。它可以独立于主处理器运行&#xff0c;即使在系统电源关闭的情况下(需要备用纽扣电池)&#xff0c;也能继续计时和记录日期。注意&#xff1a;RTC是芯片内部的功能&#xff0c;并没有和G…

Android跨进程通信,RPC,IPC

文章目录 Android跨进程通信&#xff0c;RPC&#xff0c;IPC1.IPC原理2.RPC原理2.RPC原理 Android跨进程通信&#xff0c;RPC&#xff0c;IPC RPC&#xff08;基于IPC实现&#xff09; Android binder就是一个RPC框架&#xff0c;在已经启动的一个进程a中&#xff0c;访问到进…

Eaxyx 让圆球跟随鼠标移动

如果出现2023&#xff0c;代表配置成功: 进入Eaxy官方网站&#xff0c;点击文档&#xff1a; 选择 函数->绘图函数->initgraph: 可以看见initgraph&#xff08;&#xff09;函数有如下三个参数: 现在我们想生成一个1280*720大小的窗口&#xff1a; 我们需写如下代码: 但…

AIGC: 关于ChatGPT中的核心API调用示例

Open AI 的 api 调用示例 API的调用的文档&#xff1a;https://platform.openai.com/docs/api-reference/introductionChatGPT官方提供了 Python版的包 和 Nodejs版的包 $pip install openai$npm install openai 我们使用 python3.8版本来安装: $sudo python3.8 -m pip instal…

数据结构算法-冒泡排序算法

引言 虽然选择排序好用 &#xff0c;但有点问题 也就是频繁找最大值下标 放到 未排序的后面 因为每次需要扫描整个未排序序列&#xff0c;找到最大值或最小值的下标&#xff0c;并将其交换到未排序序列的最后一个位置。这样做的问题在于&#xff0c;在后面的迭代中&#xff0c…

C# WPF上位机开发(计算器界面设计)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 c# wpf最大的优势就是开发业务软件比较快、效率比较高。一般来说&#xff0c;它的界面和逻辑部分可以同时开发。界面的部分用xaml编写即可&#xf…

Spring Framework详解

学习目标 能够说出Spring的体系结构 能够编写IOC入门案例 能够编写DI入门案例 能够配置setter方式注入属性值 能够配置构造方式注入属性值 能够理解什么是自动装配 一、Spring简介 1 Spring课程介绍 问题导入 我们为什么要学习Spring框架&#xff1f; 1.1 为什么要学 Spri…

Nat. Mach. Intell. | 预测人工智能的未来:在指数级增长的知识网络中使用基于机器学习的链接预测

今天为大家介绍的是来自Mario Krenn团队的一篇论文。一个能够通过从科学文献中获取洞见来建议新的个性化研究方向和想法的工具&#xff0c;可以加速科学的进步。一个可能受益于这种工具的领域是人工智能&#xff08;AI&#xff09;研究&#xff0c;近年来科学出版物的数量呈指数…

数据结构—两个有序单链表的合并排序算法

viod merge(LNode *A,LNode *B){ LNode *C;//新节点 LNode *p C;//辅助指针 while(A->next !null && B->next !null){ if(A->next->data > B->next->data){//A节点大 p->nextA->next;//A元素插入C AA>next; pp->next; }else{ p->…

如何选择适合的光电传感器与 STM32 微控制器进行接口设计

本文介绍了如何选择适合的光电传感器与 STM32 微控制器进行接口设计的方法。首先我们将介绍一些选择光电传感器的关键因素&#xff0c;包括测量范围、响应时间、分辨率和输出类型。然后我们将介绍如何根据所选传感器的特性进行硬件连接和接口设计。最后&#xff0c;我们将提供示…

机器学习在缺陷检测中的实际效果与应用案例

机器学习在缺陷检测中的实际效果与应用案例 机器学习在缺陷检测中的应用已经变得非常广泛&#xff0c;并且在许多行业中都得到了实践验证。通过使用机器学习算法&#xff0c;我们能够训练模型来自动检测产品或过程中的缺陷&#xff0c;从而提高生产效率&#xff0c;降低人工检…

项目开发维护技术文档(总结梳理)

目录 一、项目背景 二、架构设计 1.技术栈 2.架构图 3.代码结构 三、模块划分 1.用户模块 2.商品模块 四、开发规范 1.命名规范 2.代码格式 3.版本控制 五、部署流程 1.环境要求 2.部署流程 六、问题解决 1.数据库连接异常 2.Redis缓存失效 七、参考资料 项…

同旺科技 USB TO SPI / I2C --- 调试W5500

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 读取重试时间值寄存器&#xff0c;默认值0x07D0 输出结果与默认值一致&#xff0c;芯片基本功能已经调通&am…

go自定义端口监听停用-------解决端口被占用的问题

代码 package mainimport ("fmt""log""net""os/exec""strconv""strings" )func getSelect(beign int, end int) int {var num intfor {_, err : fmt.Scan(&num)if err ! nil {fmt.Println("输入错误&am…

2、RocketMQ源码分析(二)

RocketMQ的底层通信模块remoting remoting是RocketMQ的底层通信模块&#xff0c;RocketMQ底层通讯是使用Netty来实现的。本文通过对remoting源码进行分析&#xff0c;来说明remoting如何实现高性能通信的。 二、Remoting 通信模块结构 remoting 的网络通信是基于 Netty 实现&…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《市场环境下运行的光热电站子系统容量优化配比研究》

这个标题涉及到对市场环境下运行的光热电站子系统进行容量优化配比的研究。让我们逐步解读&#xff1a; 市场环境下运行的光热电站&#xff1a; 这指的是光热电站在实际市场环境中的运行&#xff0c;可能包括了市场相关的经济、政策、竞争等因素。 子系统&#xff1a; 光热电站…

十六进制数列求和

高精度数组的集大成 做的时候在和高中同学叙叙旧&#xff0c;差点寄掉 代码如下&#xff1a; #include<stdio.h> void expand(int len); const char hexadecimal[17] "0123456789ABCDEF"; int result[20], mid[20], l_result[100];int main(void) {char tm…

你好!二分查找【JAVA】

1.初次相识 二分查找又称折半查找&#xff0c;是一种在有序数组中查找特定元素的算法。二分查找的基本思想是&#xff1a;通过不断地二分数组的中间元素&#xff0c;缩小查找区间&#xff0c;直到找到目标元素或者确定目标元素不存在为止。 二分查找的时间复杂度为O(logn)&…