为什么在Python中总是使用【字典】这种类型呢?

news2024/11/27 14:57:35

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 创建字典
  • 新增字典元素
    • update 方法
  • 删除字典元素
    • pop 方法
    • popitem 方法
  • 查找字典元素
    • in 和 in not 操作符
    • get 方法
    • thisdict[key]
  • 修改字典元素
  • 遍历字典元素
    • for循环遍历
    • keys方法
    • values方法
    • items方法
  • 合并字典
    • 字典中的key
  • 字典常用接口汇总

在这里插入图片描述

创建字典

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

在Python中,{}表示一个空字典,同时 dict() 也表示一个空字典。例如:

a = {}
b = dict()

c = {
    'stu_id':777,
    'name':'sl'
}

说明一下:

  • 字典是一种存储键值对的结构,键和值一一对应,根据键就能快速地找到其对应的值。
  • 字典中的元素 value 没有顺序,可以是任意类型,甚至也可以是字典。
  • 字典的键值 key 可以是任意不可变类型(数值、字符串、元组)。
bands = {'Marxes':['Moe', 'Curly'], 'KK':[True, 'moon']}
print(bands['KK'][0]) # True
print(bands['KK'][1]) # moon

poi = {(100,100):'Zhangjiang', (123,23):'Pizza'}
print(poi[(100,100)]) # Zhangjiang

新增字典元素

通过thisdict[new_key] = value的方式可以将键值对<key, value>插入到字典 thisdict 中。比如:

a = {
    'stu_id': 777,
    'name': 'dragon'
}

a['sex'] = 'male'

print(a) # {'stu_id': 777, 'name': 'dragon', 'sex': 'male'}

update 方法

使用 update 方法可以将多个键值对插入到字典中。比如:

a = {
    'stu_id':777,
    'name':'sl'
}

a.update({'sex':'male', 'age':18})

print(a) # {'stu_id': 777, 'name': 'sl', 'sex': 'male', 'age': 18}

删除字典元素

pop 方法

使用 pop 方法可以删除指定键值key的键值对。比如:

a = {
    'stu_id':777,
    'name':'sl',
    'sex':'male'
}

a.pop('sex')

print(a) # {'stu_id': 777, 'name': 'sl'}

popitem 方法

使用 popitem 方法可以删除最后插入字典的键值对。比如:

a = {
    'stu_id':777,
    'name':'sl',
    'sex':'male'
}

a.popitem()

print(a) # {'stu_id': 777, 'name': 'sl'}

查找字典元素

in 和 in not 操作符

使用 in 和 in not 操作符能够判定指定的键值key是否在字典中存在。比如:

a = {
    'stu_id':777,
    'name':'sl'
}

print('id' in a) # False
print('stu_id' in a) # True
print('id' not in a) # True
print('stu_id' not in a) # False

PS:

in和not in操作符只是判定key是否存在,与value无关。

get 方法

使用get方法可以获取指定键key的值value。比如:

a = {
    'stu_id':777,
    'name':'sl'
}

print(a.get('stu_id')) # 777
print(a.get('name'))   # sl
print(a.get('sex')     # None

PS:

如果指定的键key不存在,则get方法返回None。

get 方法的应用场景:

  1. 避免 KeyError 异常:当不确定键是否存在时,使用 ‘get方法’ 可以避免因访问不存在的键而引发 KeyError 异常
  2. 设置默认值:通过在‘get方法’ 中传入默认值参数,可以在键不存在时返回指定的默认值,而不是返回None

比如:
获取键为’grape’的值,不存在返回指定的默认值

print(my_dict.get('grape', 0))  # 输出: 0

thisdict[key]

通过 thisdict[key] 的方式也可以获取指定键 key 的值 value 。比如:

a = {
    'stu_id':777,
    'name':'sl'
}

print(a['name']) # sl
print(a['sex']) # 指定的key值不存在,抛异常 KeyError

修改字典元素

thisdict[key] = new_value

通过 thisdict[key] = new_value 的方式可以修改指定键key的值value。比如:

a = {
    'stu_id':777,
    'name':'sl'
}

a['stu_id'] = 71
print(a) # {'stu_id': 71, 'name': 'sl'}

PS:

使用 [ ] 可以根据key来新增或修改value,如果指定的key不存在,则为新增键值对,如果指定的key存在,则为修改键值对的值。

遍历字典元素

for循环遍历

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

a = {
    'stu_id':777,
    'name':'sl',
    'sex':'male'
}

for key in a:
    print(key, a[key])

# stu_id 777
# name sl
# sex male

PS:

使用for循环对字典进行遍历时,实际上是在对字典中的key进行遍历。

keys方法

使用keys方法可以获取到字典中所有key所组成的列表。比如:

a = {
    'stu_id':777,
    'name':'sl',
    'sex':'male'
}

for key in a.keys():
    print(key)

values方法

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

a = {
    'stu_id':777,
    'name':'sl',
    'sex':'male'
}

for value in a.values():
    print(value)

items方法

使用items方法可以获取到字典中所有键值对所组成的元组的列表。比如:

a = {
    'stu_id':777,
    'name':'sl',
    'sex':'male'
}

for key, value in a.items():
    print(key, value)

# stu_id 777
# name sl
# sex male

PS:

代码中的for循环对items的返回值执行遍历,也就是对列表中的一个个元组在进行遍历,每次遍历时将元组中的键和值分别赋值给key和value变量。

合并字典

update方法
使用update方法可以将一个字典合并到另一个字典中。比如:

a = {
    'stu_id':71,
    'name':'sl'
}

b = {
    'sex':'male',
    'age':18
}

a.update(b)

print(a) # {'stu_id': 71, 'name': 'sl', 'sex': 'male', 'age': 18}
print(b) # {'sex': 'male', 'age': 18}

PS:

a.update(b) 是把字典 b 中的键值对合并到字典 a 中,该操作不会修改字典 b

字典中的key

一个字典中存储的各个键值对的key可以是不同类型的。比如:

a = {
    'name': 'sl',
    1:2,
    1.1:2.2
}

print(a) # {'name': 'sl', 1: 2, 1.1: 2.2}

但并不是所有的类型都可以做=作为字典的key,因为字典本质上是一个哈希表,而哈希表的key要求是可哈希的,因此字典中的key也必须是可哈希的,所谓的可哈希就是可以计算出一个哈希值。
在Python中,使用hash函数可以计算某个对象的哈希值。比如:

print(hash(0)) # 0
print(hash(71)) # 71
print(hash('sl')) # 2276008963508680362
print(hash((1,2))) # 3550055125485641917

正如前面所提到的:

  • 字典中的元素 value 没有顺序,可以是任意类型,甚至也可以是字典。
  • 字典的键值 key 可以是任意不可变类型(数值、字符串、元组)。
    上述这些类型都是可哈希的,因为我们都能通过hash函数计算出其对应的哈希值,而有些类型是不可哈希的。比如:
print(hash([1,2])) # 列表不可哈希
print(hash({1,2})) # 集合不可哈希
print(hash({'stu_id':777, 'name':'sl'})) # 字典不可哈希

使用hash函数计算’不可哈希‘对象的哈希值时,程序就会抛异常 TypeError

字典常用接口汇总

字典操作:

字典操作方式
字典检查in和in not
添加键值对thisdict[key]=new_value
访问值thisdict[key]
修改值thisdict[key]=new_value
字典长度len()

字典的成员对象:

成员函数功能
copy复制字典
clear清空字典
get返回指定键的值
update向字典中添加多个键值对(合并字典)
pop删除指定键的键值对
popitem删除最后插入的键值对
keys返回包含字典中所有键的列表
values返回包含字典中所有值的列表
items返回包含字典中所有键值对的元组列表
fromkeys返回拥有指定键和值的字典
setdefault返回指定键的值,如果该键不存在,则插入具有指定值的键
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

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

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

相关文章

深入解析大语言模型显存占用:训练与推理

深入解析大语言模型显存占用&#xff1a;训练与推理 文章脉络 估算模型保存大小 估算模型在训练时占用显存的大小 全量参数训练 PEFT训练 估算模型在推理时占用显存的大小 总结 对于NLP领域的从业者和研究人员来说&#xff0c;有没有遇到过这样一个场景&#xff0c;你的…

Java8之接口默认方法

Java8之接口默认方法 一、介绍二、代码1、接口2、实现类3、测试代码4、效果 一、介绍 在Java8中&#xff0c;允许为接口方法提供一个默认的实现。必须用default修饰符标记这样一个方法。默认方法也可以调用其他方法 二、代码 1、接口 public interface PersonService {void…

基于ARM内核的智能手环(day1)

整体介绍 智能手环由 ARM 内核 MCU(Cortex-M 系列)、TFTLCD 屏、温湿度传感器、心率传感器、 加速度传感器等主要几部分构成。该平台硬件采用 STM32 芯片&#xff0c;通过对温湿度传感器的驱动编写&#xff0c;获取周围温湿度数据&#xff0c;并在 LCD 屏显示&#xff0c;通过对…

算法学习——LeetCode力扣动态规划篇8

算法学习——LeetCode力扣动态规划篇8 300. 最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删…

会话跟踪技术(Session 以及Cookie)

一: 前提概要 1>会话: 会话指的是用户打开浏览器, 访问某些web服务器资源的时候, 会话就会进行建立, 直到有一方断开, 那么会话才会结束, 需要注意的一点是, 一次的会话可以有多次的请求以及响应 2>会话跟踪: 是一种用于维护浏览器状态的方法, 服务器需要识别多次的请求,…

基于springboot的船舶维保管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

深入理解Docker-使用Docker有什么优势?

Docker是什么&#xff1f; 我们先给出Docker官网给出的定义来看下Docker是什么&#xff1f; Docker加速你应用的构建&#xff0c;共享和运行。 怎么来加速的那&#xff1f; without tedious envionment configuration or management 不用进行哪些乏味的环境配置和管理。 怎么…

U盘无法打开?教你几招轻松解决数据恢复难题

在日常生活和工作中&#xff0c;U盘作为移动存储设备&#xff0c;承载着我们大量的重要数据。然而&#xff0c;当某一天我们满怀期待地将U盘插入电脑&#xff0c;却发现它无法被正常打开时&#xff0c;那种焦虑和挫败感简直让人崩溃。我们可能会尝试各种方法&#xff0c;如重新…

java将文件转成流文件返回给前端

环境&#xff1a;jdk1.8&#xff0c;springboot2.5.3,项目端口号&#xff1a;9100 1.待转换的文件 一、路径 二、文件内容 2.controller中代码 package com.example.pdf.controller;import com.example.pdf.service.GetFileStreamService; import org.springframework.web.b…

Java项目修改了代码总是不生效咋么个事

1.问题发现 自己修改了yml配置文件&#xff0c;然后发现重启项目访问还是原来的配置 查看target下的class文件 发现&#xff0c;这个值并没有变&#xff0c;也就是我们修改完代码其实是没有触发编译文件重新生成class的&#xff0c;这时候我们可以手动解决&#xff0c;选择m…

外包干了5天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【Web】NSSCTF Round#20 Basic 个人wp

目录 前言 真亦假&#xff0c;假亦真 CSDN_To_PDF V1.2 前言 感谢17&#x1f474;没让我爆零 真亦假&#xff0c;假亦真 直接getshell不行&#xff0c;那就一波信息搜集呗&#xff0c;先开dirsearch扫一下 扫的过程中先试试常规的robots.txt,www.zip,shell.phps,.git,.sv…

笔迹/签名数据集汇总

这里只收集公开/易申请的数据集 数据集发表年份语言最小单元Writers/人规模颜色最小单元文件格式示例图片备注CSAFE Handwriting Database2019英语页9090 人*(3 次*9 个样本) 2430 页300 dpi 扫描png-HWDB2.0-2.22011汉字页1,019每人 5 页,共 5091 页灰度图dgrl-CEDAR2006英语…

【Java面试题】Redis中篇(高可用:主从复制、哨兵、集群)

文章目录 高可用14.Redis如何保证高可用&#xff1f;15.Redis的主从复制&#xff1f;16.Redis主从有几种常见的拓扑结构&#xff1f;17.Redis的主从复制原理了解吗&#xff1f;18.说说主从数据同步的方式&#xff1f;19.主从复制存在的问题&#xff1f;20.Redis Sentinel(哨兵)…

ATFX汇市:欧元区的2月M1增速为-7.7%,潜在通胀下修,欧元币值受冲击

ATFX汇市&#xff1a;衡量经济体的潜在通胀指标&#xff0c;除了CPI数据、失业率数据外&#xff0c;还有M1、M3数据。昨日&#xff0c;欧洲央行公布了2月份欧元区货币发展报告&#xff0c;其中提到&#xff1a;广义货币总量M3的年增长率从1月份的0.1%上升到2024年2月的0.4%&…

多线程JUC 第2季 synchornized和Lock锁(重入,公平)

一 锁 1.1 锁的介绍 synchronized&#xff0c;和lock锁都是一种悲观锁。悲观锁适用于写多场景&#xff0c;乐观锁适用于读多场景&#xff0c;实现策略有&#xff1a;版本号和cas自旋算法。

ubuntu22.04@Jetson Orin Nano安装配置VNC服务端

ubuntu22.04Jetson Orin Nano安装&配置VNC服务端 1. 源由2. 环境3. VNC安装Step 1: update and install xserver-xorg-video-dummyStep 2: Create config for dummy virtual displayStep3: Add the following contents in xorg.conf.dummyStep 4: Update /etc/X11/xorg.con…

CQ 社区版2.10.0 | 新增 SQL 审核、全新英文版上线…

三月中旬&#xff0c;我们预告了 CloudQuery 社区版即将上线的「SQL 审核」功能。现在&#xff0c;它来了&#xff01; 本次社区版 v2.10.0&#xff0c;除了 SQL 审核功能&#xff0c;我们还在手动授权、连接分组等模块做了新功能和优化。 新增功能 新增 SQL 审核功能 支持…

【STM32嵌入式系统设计与开发】——13WWDG(窗口看门狗应用)

这里写目录标题 一、任务描述二、任务实施1、WWDG工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;USART1初始化函数(usart1_init())&#xff08;3&#xff09;USART数据发送函数&#xff08; USART1_Send_Data&#xff08;&#xff09…

访学博后须知|携带手机等电子产品入境美国注意事项

美国对携带手机等电子产品入境有着严格的规定&#xff0c;因此知识人网小编提醒拟出国做访问学者、博士后或联合培养的博士生了解以下注意事项&#xff0c;尽量减少不必要的麻烦。 随着互联网的普及&#xff0c;手机等电子产品在人民生活中占有不可或缺的地位。因为研究和工作需…