Python 字典操作函数 pop 与 popitem 的区别

更多资料获取

📚 个人网站:ipengtao.com


在Python中,字典(dictionary)是一种常用的数据结构,而对字典进行操作的函数也是开发中的重要工具。本文将深入探讨字典操作函数中的 poppopitem 两个方法,详细讲解它们的用法、区别以及在实际应用中的场景。

pop 方法

1、基本用法

pop 方法用于删除字典中指定键对应的值,并返回该值。如果键不存在,可以提供默认值作为参数。

my_dict = {'apple': 3, 'banana': 5, 'cherry': 7}

# 删除 'banana' 键对应的值
value = my_dict.pop('banana')
print(value)  # 输出: 5

# 删除 'pear' 键,返回默认值 0
value = my_dict.pop('pear', 0)
print(value)  # 输出: 0

2、异常处理

在删除不存在的键时,如果没有提供默认值,会引发 KeyError 异常。因此,使用 pop 时需要注意异常处理。

try:
    value = my_dict.pop('pear')
except KeyError as e:
    print(f"KeyError: {e}")

popitem 方法

1、基本用法

popitem 方法用于随机删除字典中的一项(键值对),并以元组形式返回被删除的键值对。由于字典是无序的,实际上是删除最后一项。

my_dict = {'apple': 3, 'banana': 5, 'cherry': 7}

# 随机删除一项
item = my_dict.popitem()
print(item)  # 输出: ('cherry', 7)

2、空字典处理

在空字典上使用 popitem 会引发 KeyError 异常,因此需要合理处理。

if my_dict:
    item = my_dict.popitem()
    print(item)
else:
    print("Dictionary is empty")

区别与应用场景

1、区别

  • pop 是根据指定键删除对应的键值对,并返回该值。它需要提供键,并且如果键不存在,可以提供默认值。
  • popitem 则是随机删除字典中的一项,以元组形式返回被删除的键值对。它不需要提供键,但在空字典上使用时可能引发异常。

2、应用场景

  • 使用 pop 当你需要精确指定要删除的键,并希望在键不存在时有一个默认值。
value = my_dict.pop('banana', 0)
  • 使用 popitem 当你无需精确指定要删除的键,而只是想删除任意一项。
item = my_dict.popitem()

扩展示例

1、pop 方法的应用

从字典中提取值并进行计算
inventory = {'apple': 10, 'banana': 5, 'cherry': 8}

# 使用 pop 从库存中取出并计算苹果的数量
apple_count = inventory.pop('apple', 0)
total_cost = apple_count * 2.5

print(f"Apple Count: {apple_count}, Total Cost: {total_cost}")
动态更新字典中的值
user_data = {'name': 'John', 'age': 25, 'points': 50}

# 使用 pop 更新用户的积分并添加新的值
points = user_data.pop('points', 0)
user_data['level'] = 'Silver' if points >= 50 else 'Bronze'

print(user_data)

2、popitem 方法的应用

实现一个简单的缓存
cache = {}

def get_data_from_server(key):
    # 模拟从服务器获取数据的操作
    return f"Data for {key}"

# 使用 popitem 实现一个简单的缓存,最多存储5个数据
def update_cache(key, data):
    if len(cache) >= 5:
        cache.popitem(last=False)  # 删除最早加入的数据
    cache[key] = data

# 测试缓存更新
for i in range(1, 8):
    key = f"Key-{i}"
    data = get_data_from_server(key)
    update_cache(key, data)

print(cache)
随机删除元素
import random

my_list = [1, 2, 3, 4, 5]

# 使用 popitem 随机删除列表中的一个元素
while my_list:
    index = random.randint(0, len(my_list) - 1)
    element = my_list.pop(index)
    print(f"Removed: {element}, Remaining: {my_list}")

性能考虑

在实际应用中,性能通常是一个关键考虑因素。对于字典操作而言,在选择 pop 还是 popitem 时,性能差异是需要仔细考虑的。

1 、pop 方法的性能

  • 适用于需要明确指定要删除的键的场景。
  • 在具体指定键的情况下,pop 方法的性能是非常高效的,因为它直接通过键来进行删除操作。
  • 不会涉及字典的遍历或随机访问,因此在大多数情况下性能较好。
my_dict = {'apple': 3, 'banana': 5, 'cherry': 7}
value = my_dict.pop('banana')  # 高效的键删除操作

2 、popitem 方法的性能

  • 适用于无需精确指定键,而是希望随机删除一项的场景。
  • popitem 方法的性能通常比 pop 更为优越,因为它不需要指定键,可以更加均匀地分配删除操作。
  • 但在空字典上的性能相对较差,因为它需要检查字典是否为空。
my_dict = {'apple': 3, 'banana': 5, 'cherry': 7}
item = my_dict.popitem()  # 高效的随机删除一项操作

3 、综合考虑

  • 在具体应用中,可以根据需求综合考虑字典的大小、删除操作的频率以及是否需要精确指定键等因素。
  • 如果字典规模较大且删除操作频繁,popitem 可能更适合,因为它有助于更均匀地分布删除压力。
  • 如果需要明确指定要删除的键,或者字典规模较小,pop 是一个更直观、高效的选择。

总结

poppopitem 是字典操作中的两个重要函数,各自有着独特的用途和适用场景。正确理解它们的区别,根据具体需求选择使用,可以使代码更为灵活和高效。pop 用于精确指定要删除的键,而 popitem 用于无需精确指定键的场景,尤其在需要随机删除元素时具有优势。在实际应用中,根据具体需求选用合适的函数,可以更好地发挥字典的威力。通过深入学习 poppopitem 的用法,读者将更好地掌握这两个函数的灵活运用,从而提高在Python中对字典的操作水平。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++的面向对象学习(4):对象的重要特性:构造函数与析构函数

文章目录 前言:将定义的类放在不同文件夹供主文件调用的方法一、构造函数与析构函数1.什么是构造函数和析构函数?2.构造函数和析构函数的语法3.构造函数的具体分类和调用方法①总的来说,构造函数分类为:默认无参构造、有参构造、拷…

word导入导出-Apache POI 和 Poi-tl

word 文件读取 使用Apache POI Word 进行读取文件 使用poi 时如果报ClassNotFoundException 等错误,请注意请求以下maven 文件的版本 Apache POI Word 说明文档:Apache POI Word 说明文档 maven 解决依赖冲突教程:https://www.cnblogs.com/…

[AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现

目录 关键词平台说明前言一、总体流程二、配置2.1 DCM and DEM2.2 BSWM2.2.1 Mode Notifaication Port2.2.2 Rules 2.3 service port2.3.1 做好DCM-->BSWM 和DCM -->SWC_Diag 的server port mapping2.3.2 做好BSWM ESH_ModeNotification 的server port mapping 2.4 SWC 中…

【Qt之Quick模块】5. QML基本类型及示例用法

QML格式 QML基本类型 在 QML 中,有以下基本类型: int:整数类型。 Rectangle {function myFunction() {// 输出 debug 信息console.log("11 " (11));}Component.onCompleted: {myFunction();} }结果: 2. real&…

PHP数组定义和输出

数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。 PHP中的数组与Java的数组不一样,需要有key(键)和value(值),相当于Java中数组和键值对的结合。 数组的定义 …

zynqmp Linux + 裸机 (A53-0 Linux,A53-1 2 3 裸机大数据量实时处理,R5-0 协议处理,R5-1 屏幕显示逻辑等)填坑笔记

fpga 和arm 采用预留内存的方式,采用neon 协处理器只能做到 250M/S 的速度,预留内存采用mmap的方式,当读取内存页的时候采用缺页中断的方式,导致速度拖沓而且预留内存没有进行Linux系统的内存管理(在系统内 memcpy的速…

JMeter常见错误分析

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

《PySpark大数据分析实战》-17.云服务模式Databricks介绍运行作业

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

数据结构之进阶二叉树(二叉搜索树和AVL树、红黑树的实现)超详细解析,附实操图和搜索二叉树的实现过程图

绪论​ “生命有如铁砧,愈被敲打,愈能发出火花。——伽利略”;本章主要是数据结构 二叉树的进阶知识,若之前没学过二叉树建议看看这篇文章一篇掌握二叉树,本章的知识从浅到深的对搜索二叉树的使用进行了介绍和对其底层…

【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

110基于matlab的混合方法组合的极限学习机和稀疏表示进行分类

基于matlab的混合方法组合的极限学习机和稀疏表示进行分类。通过将极限学习机(ELM)和稀疏表示(SRC)结合到统一框架中,混合分类器具有快速测试(ELM的优点)的优点,且显示出显着的分类精…

网安面试三十道题(持续更新)(sql注入系列)

61 给你一个网站,一般怎么做渗透测试的 先确定黑盒测试还是白盒测试 黑盒测试 信息收集: 服务器相关---:系统版本,真实IP,开放端口,使用的中间件 指纹信息---有无cdn加速,dns解析记录&#xff0…

ARM GIC(三) gicv2架构

ARM的cpu,特别是cortex-A系列的CPU,目前都是多core的cpu,因此对于多core的cpu的中断管理,就不能像单core那样简单去管理,由此arm定义了GICv2架构,来支持多核cpu的中断管理 一、gicv2架构 GICv2,支持最大8个core。其框图如下图所示: 在gicv2中,gic由两个大模块组成: …

页面级UI状态存储LocalStorage

目录 1、LocalStorageProp 2、LocalStorageLink 3、LocalStorage的使用 4、从UI内部使用LocalStorage 5、LocalStorageProp和LocalStorage单向同步的简单场景 6、LocalStorageLink和LocalStorage双向同步的简单场景 7、兄弟节点之间同步状态变量 LocalStorage是页面级的…

FISCO BCOS 中webase-deploy配置项详细说明

本文整理了webase-deploy的相关配置,例如如何webase启用基于自己搭的链,而不启用默认的两节点链 1.WeBASE 子系统版本 指定了 WeBASE 的各个子系统(web、mgr、sign、front)的版本号为 v1.5.5。 2.Docker 相关配置: docker.mysql 3.如果使用 Docker 安装&…

重温经典struts1之国际化(I18N)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 拿Google网站来举例,在世界上不同国家和地区,登陆Google网站,网站上都会显示本国家语言,它是怎么做到的,就是…

FasterRCNN目标检测

R-CNN 四个步骤: 对输入图片提取候选区(region proposal),每张大约2000个。论文中采用selective search的方法。对每个候选区采用CNN网络提取特征。此处需要将proposal的尺寸缩放成统一的227x227,以匹配CNN网络。最终提取到的特征…

一款外置MOS开关降压型 LED 恒流控制器应用方案

一、基本概述 TX6121 是一款高效率、高精度的降压型大功率 LED 恒流驱动控制器芯片。芯片采用固定关断时间的峰值电流控制方式,关断时间可通过外部电容进行调节,工作频率可根据用户要求而改变。 通过调节外置的电流采样电阻,能控制高亮度 LE…

基于ssm+jsp学生综合测评管理系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把学生综合测评管理与现在网络相结合,利用java技术建设学生综合测评管理系统,实现学生综合测评的信息化。则对于进一步提高学生综合测评管理发展,丰富学生综合测评管理经验能起到不少的促进作用。…

【运维面试100问】(十一)淡淡I/O过程

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…