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.rhkb.cn/news/457919.html

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

相关文章

Linux:指令再认识

文章目录 前言一、知识点1. Linux下一切皆文件,也就是说显示器也是一种文件2. 指令是什么?3. ll 与 ls -l4. 日志5. 管道6. 时间戳 二、基本指令1. man指令2. cp指令3. mv指令4. 查看文件1)cat/tac指令——看小文件2)more/less指令…

Qt:QtCreator使用

用一个QtCreator适配所有Qt版本 首先Qt和QtCreator版本并不是通用的,一个电脑中可以安装很多个Qt版本,但只需要安装一个最新版本的QtCreator即可 Qt是一个语言,也可理解为一个SDK库,Qt目前最新版本为6.7 QtCreator是一个集成开发…

嵌入式Linux的AXI平台(platform)驱动教程

本文以JFMQL100的Linux系统的AXI接口的平台驱动为例,介绍嵌入式Linux的平台驱动编写、测试软件编写以及验证方式。本文的方法适用于任意嵌入式芯片Linux的物理地址映射的平台(platform)驱动的编写、测试与应用。 本文中AXI的开始地址为0x8000…

Python浪漫之画星星

效果图(动态的哦!): 完整代码(上教程): import turtle import random import time # 导入time模块# 创建一个画布 screen turtle.Screen() screen.bgcolor("red")# 创建一个海龟&a…

Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)

coppelia sim[V-REP]仿真实现 机器人于3D相机手眼标定与实时视觉追踪 一 标定板的制作生成标定的PDF文件PDF转为图像格式图像加载到仿真中 二 仿真场景设置加载机器人加载的控制dummy ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b48549d355d8441d8dfc20bc7ba7196…

MYSQL作业三

准备工作 查询操作

Linux复习-C++

参考博客: https://blog.csdn.net/qq_45254369/article/details/126023482?ops_request_misc%257B%2522request%255Fid%2522%253A%252277629891-A0F3-4EFC-B1AC-410093596085%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&req…

力扣 167. 两数之和 II - 输入有序数组

目录 一、题目二、思路三、代码 一、题目 二、思路 由于数组是 非递减顺序排列 的,利用该先验知识,可以设置两个指针在数组的起始和末尾,相向前进,与暴力枚举相比可以加快寻找速度。 三、代码 class Solution {public int[] tw…

面向对象(上)

1.初始对象 学习目标:理解使用对象完成数据组织的思路 可以看到加入了登记表后,我们学生所提供的信息就组织的简洁明了 程序中也是有多种多样的方式来记录数据 思考:使用变量记录数据太乱了,如果程序中也和生活中一样&#xff…

Linux - 动静态库

文章目录 一、静态库1、定义2、文件扩展名3、生成静态库4、使用静态库5、静态库的优缺点 二、动态库1、定义2、文件扩展名3、生成动态库4、使用动态库5、动态库的优缺点6、简单动态库加载 三、补充 一、静态库 1、定义 静态库是在编译时链接到最终的可执行文件中的库。这意味着…

Java Web项目实战:从零基础到项目开发全流程

Java Web开发环境搭建 Java Web开发需要Java运行环境、IDE(如IntelliJ IDEA或Eclipse)以及Maven集成开发工具等。首先,确保电脑上安装有Java 8或更高版本,可以通过访问Java官网获取最新版本。其次,安装IDE&#xff0c…

深入理解跳出率:如何利用百度统计优化网站用户体验

在数字营销的世界中,跳出率是一个关键指标,它衡量了用户对网站的第一印象和内容的吸引力。最近,我在分析我的网站数据时发现,跳出率常常高达100%,这促使我深入研究了跳出率的含义和影响因素。 跳出率的定义与计算 跳…

AndroidStudio Koala更改jdk版本 2024-1-2

升级android studio版本到 AndroidStudio Koala之后,发现修改jdk版本的方式不同了。如下: 修改jdk版本

《Python网络安全项目实战》

《Python网络安全项目实战》 项目1 Python 环境安装任务1.1 Windows上安装Python任务1.2 Ubuntu环境下安装Python 项目2 Python基础练习任务2.1 使用数据类型任务2.2 使用组合数据类型任务2.3 使用控制结构任务2.4 使用函数任务2.5 使用模块 项目3 处理文件中的数据任务3.1 读文…

Ajax:XMLHttpRequest

Ajax:XMLHttpRequest XMLHttpRequestgeturlpost 数据交换格式XMLjson XMLHttpRequest Level 2请求时限表单数据操纵文件上传 XMLHttpRequest XMLHttpRequest简称 xhr,是浏览器提供的 Javascript 对象,通过它可以请求服务器上的数据资源。 jQ…

如何在vscode中使用鼠标滑轮滚动来改变字体大小

实现内容:如何在vscode中使用鼠标滑轮滚动来改变字体大小 使用场景:我是在Ubuntu中安装的vscode 需求:因为最近在用这个,但是在使用过程中发现vscode的字体大小有点小,所以想改变下 实现滚轮滑动改变字体大小的具体步…

Spring Boot框架下的酒店住宿登记系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

2024 7月算法刷题记录

小米真题 手机流畅运行的秘密 时间限制:1.000S 空间限制:256MB 题目描述 8 月份发布会一结束,米小兔就在公司领到了一台最新发布的 Xiaomi MIX Fold 3 手机,这是一款小米旗舰折叠屏手机,并搭载了全新升级架构的 MI…

Redis 线程控制 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 线程控制 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 线程控制 & 总结》(学习总结/最新最准/持续更新)《Redis &a…

架构师备考-数据库设计、实施和维护

数据库设计 数据库设计的任务是针对一个给定的应用环境,在给定的硬件环境和操作系统及数据库管理系统等软件环境下,创建一个性能良好的数据库模式,建立数据库及其应用系统,使之能有效地存储和管理数据,满足各类用户的需…