Python 判断键是否存在字典中(新手入门、实战案例)

在早期的Python2版本中,可以使用 dict.has_key()方法来判断一个键是否存在于字典中。

在Python3中,dict.has_key()方法被废弃了,不能再被使用。如果在Python3中尝试使用dict.has_key()方法会导致 AttributeError异常。

那在Python3中要如何判断一个键是否存在于字典中呢?

student = {'name': '小明', 'age': 30, 'gender': 'male'}
if ( student.has_key('name') ):print( studnet['name'] )

26c28877ab2543f4a29d0b427dba4b91.png

 一、使用 in 关键字来判断(推荐)

student = {'name': '小明', 'age': 30, 'gender': 'male'}
if 'name' in student:print( "键 'name' 存在于字典student中" )
else:print( "键 'name' 不存在于字典student中" )
if 'grade' in student:print( "键 'grade' 存在于字典student中" )
else:print( "键 'grade' 不存在于字典student中" )

41e896a95d224137ae1afb6e72c8d1bc.png

二、使用 dict.get() 方法

dict.get(key[, default=None])
返回指定键所对应的值,如果键不在字典中返回default值, default 默认为 None

student = {'name': '小明', 'age': 30, 'gender': 'male'}
if student.get('name'):print( "键 'name' 存在于字典student中" )
else:print( "键 'name' 不存在于字典student中" )
if student.get('grade'):print( "键 'grade' 存在于字典student中" )
else:print( "键 'grade' 不存在于字典student中" )

1ced83d73a884c33a8184a640582195b.png

使用 dict.get() 有一个不好的地方,就是当 key 不存在于字典当中的时候,结果返回 None,

这个在 if 判断的时候,会跟 0 产生一些混淆,造成预期外的BUG 

student = {'name': '小明', 'age': 30, 'gender': 'male', 'score': 0}
if student.get('score'):print( "键 'score' 存在于字典student中" )
else:print( "键 'score' 不存在于字典student中" )

701057f79d8e4fe4af8019cbf28adb87.png

score 键是存在于字典中的,但是结果却说不存在。

造成这个问题的原因,是 score 的值是 0,它在 if 判断的时候跟 None 一样,都被判定为 false,解决问题的方式,就是 student.get('score') != None 人为显式地判空,但是这样就不如 in 关键字来的简洁。

student = {'name': '小明', 'age': 30, 'gender': 'male', 'score': 0}
if student.get('score') != None:print( "键 'score' 存在于字典student中" )
else:print( "键 'score' 不存在于字典student中" )

e2d434a1888a4c2cb15dfe61d1147bfa.png

三、实战案例

leecode 第一题:

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

解题的思路,就是利用字典的 key 来保存 nums 的值,用字典的 value 来保存 nums 的索引。通过字典的 hash 定位,快速查找到符合 target - item 表达式的 索引。

时间复杂度为 O(n) 只有一次遍历。  

def twoSum(nums, target):result = []my_dict  = {}for i in range( len(nums) ):item = nums[i]other = target - itemif my_dict.get(other) != None:result.append( my_dict.get(other) ) result.append( i )return result# 这两种写法都可以# if my_dict.get( item ) == None: if item not in my_dict:my_dict[item] = i   return resultsum = twoSum([2, 7, 11, 15], 9)
print( sum )
sum = twoSum([3,2,4], 6)
print( sum )
sum = twoSum([3,3], 6)
print( sum )

df002b8c07a943f1b3d273e469ccf6ee.png

四、总结

过尽千帆,依然算法。

1、在Python3中,dict.has_key()方法已经被废弃,不能再被使用。

2、在实际开发中,可以使用in关键字或dict.get()方法来判断键是否存在。

3、推荐用 in 关键字,简洁、高效,不容易出错。

 

 

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

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

相关文章

k8s-service详解

Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资源…

关于Docker的docker engine stopped问题解决

问题图: 主要检查这两块 启用或关闭Windows功能如下图(将没开启的开启特别是Hyper-V,Linux,虚拟机等): 然后打开任务管理器搜索Docker service将关闭状态打开 运行管理员CMD执行如下命令 重启!&#xff01…

Uni-App-01

HBuilder安装卸载 安装 官网地址:https://www.dcloud.io/hbuilderx.html 下载HBuilder最新版 解压到安装目录,路径中不要有中文和空格 在桌面上增加快捷方式 卸载 执行reset.bat 删除HBuilder文件夹(如果提示文件被占用&#xff0…

使用语音模块的开发智能家居产品(使用雷龙LSYT201B 语音模块)

在这篇博客中,我们将探讨如何使用 LSYT201B 语音模块 进行智能设备的语音交互开发。通过这个模块,我们可以实现智能设备的语音识别和控制功能,为用户带来更为便捷和现代的交互体验。 1. 语音模块介绍 LSYT201B 是一个基于“芯片算法”的语音…

Centos7.9安装MySQL(二进制)

安装包 https://downloads.mysql.com/archives/community/ mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 1.卸载MariaDB 查看 rpm -qa|grep mariadb卸载 可能名称不一样,记得替换 rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64rpm -qa|grep mariadb 执行…

C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化

目录 1. 多线程处理的基本概念 1.1 多线程的定义 1.2 线程的创建与管理 2. 多线程在游戏开发中的应用 2.1 渲染与物理计算 3. 多线程处理的性能提升 3.1 性能评估 3.2 任务分配策略 4. 多线程中的数据竞争 4.1 数据竞争的定义 4.2 多线程访问同一资源的后果 4.3 避…

数字后端零基础入门系列 | Innovus零基础LAB学习Day5

###Module 12 RC参数提取和时序分析 数字后端零基础入门系列 | Innovus零基础LAB学习Day4 数字后端零基础入门系列 | Innovus零基础LAB学习Day3 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字后端零基础入门系列 | Innovus零基础LAB学习Day1 ###LAB12-1 这个章节…

六自由度机械臂模型预测控制MPC+倒立摆+二自由度机械臂

接下来三个例子教你入门mpc,为了体现视频的高质量,在倒立摆和二自由度模型预测控制方面,我会给出一种基于状态变量微分的实时线性化策略,经过这样处理的mpc实际可以看作是nmpc。 1.一阶倒立摆MPC 1.1倒立摆状态方程 1.2倒立摆状…

rabbitmq 使用注意事项

1,注意开启的端口号,一共四个端口号,1883是mqtt连接的端口号,如果没开,是连接不上的需要手动起mqtt插件。 //开始mqtt插件服务 rabbitmq-plugins enable rabbitmq_mqtt 2,15672端口是http网页登录的管理后…

深度学习模型预测控制python tensorflow 实现

DL-MPC(Deep Learning Model Predictive Control)是一种结合深度学习和模型预测控制的先进控制策略。其核心思想是利用深度学习模型来预测系统的未来行为,并通过模型预测控制来优化控制输入,从而实现对复杂系统的高效控制。 深度…

MATLAB实现遗传算法优化零件拆卸装配问题

零件拆卸装配问题是一个有复杂约束的优化问题,它涉及到零件之间的连接关系、拆卸或装配的顺序、工具的使用、操作成本。 1.假设: (1)零件完整性:每个零件在拆卸和装配过程中保持完整,不发生形变或损坏 &…

BUUCTF之web篇

第一题 [极客大挑战 2019]EasySQL 打开靶机后可以看到这是一个登陆的页面 我们可以尝试两种方式登录 弱口令爆破(burpsuite) 通过SQL注入里的万能密码来跳过账户和密码验证的过程 这里就需要万能密码aor true # 在这里单引号的作用是结束用户名或者密码…

Javascript基础面试题

仅学习使用,若有侵权将修改或删除|面试鸭 Javascript 有哪些数据类型?它们的区别是什么? 7 原始类型Undefined、Null、Boolean、Number、String、Symbol和BigInt 引用类型:Object(对象、函数和数组等) 如何判断 JavaScript 变量是数组? …

《BLEU: a Method for Automatic Evaluation of Machine Translation》翻译

文章目录 0. 摘要1. 引言1.1 理由1.2 观点 2. 基准 BLEU 指标2.1 修正的 n-gram 精度2.1.1 对文本块的修正 n-gram 精度2.1.2 仅使用修正 n-gram 精度对系统进行排序2.1.3 结合修正的 n-gram 精度 2.2 句子长度2.2.1 召回率的问题2.2.2 句子简短惩罚 2.3 BLEU 细节 3. BLEU 评估…

如何在Node.js中执行解压缩文件操作

一、解压文件 1.安装依赖: 安装adm-zip依赖包:npm install adm-zip --save 安装iconv-lite依赖包:npm install iconv-lite --save 解压前的file文件夹结构: update-1.0.2.zip压缩包内容: 2.在depresssFile.js文件&…

鸿蒙是必经之路

少了大嘴的发布会,老实讲有点让人昏昏入睡。关于技术本身的东西,放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一,其中很多人不太看好鸿蒙,一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点,我只扯扯…

【网络原理】网络地址转换----NAT技术详解

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 我们在 IP协议 一文中介绍过,由于IPv4协议中 IP地址只有32位,导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…

【p2p、分布式,区块链笔记 IPFS】go-ipfs windows系统客户端节点实现 kubo试用

Kubo (go-IPFS) 是最早和使用最广泛的 IPFS 实现。它包括: 一个 IPFS 守护程序服务器广泛的命令行工具用于控制节点的 HTTP RPC API用于向 HTTP 浏览器提供内容的 HTTP 网关 下载 https://dist.ipfs.tech/#go-ipfs 解压 初始化 C:\User…

docker-minio启动参数

完整命令 docker run -p 9000:9000 -p 9090:9090 -v /opt/minio/data:/data -d --name -d --restartalways minio -e "MINIO_ACCESS_KEYminio" -e "MINIO_SECRET_KEYminioadmin123" minio/minio server --console-address ":9090" -address &q…

IDEA开发工具使用技巧积累

一、IDEA 工具设置默认使用maven的settings.xml文件 第一步:打开idea工具,选中 File ——> New Projects Setup ——> Settings for New Projects 第二步:先设置下自动构建项目这个选项 第三步:选中 Build Tools ——>…