Python字典全面指南:基础操作与高级应用实例解析

在Python编程中,字典作为核心的数据结构之一,凭借其高效查询、动态添加与删除属性,成为了处理键值对数据的理想选择。本文将逐步详解Python字典的基本操作,并通过实际案例展示如何查找共同键、设置默认值、更新字典、合并字典,以及如何通过自定义类模拟字典行为,最后介绍如何基于字典实现LRU缓存策略。

基础操作

1. 获取字典所有键

使用.keys()方法可以从字典中提取全部键。例如:

a = {"1":1, "2":2, "3":3}
keys_list = list(a.keys())
print(keys_list)  # 输出:['1', '2', '3']
2. 获取键值对

利用.items()方法可以获取字典中所有键值对组成的元组序列:

a = {"1":1, "2":2, "3":3}
pairs = list(a.items())
print(pairs)  # 输出:[('1', 1), ('2', 2), ('3', 3)]
3. 查找相同键

对比两个字典中的共享键,可通过集合操作实现:

a = {"1":1, "2":2, "3":3}
b = {"2":2, "3":3, "4":4}# 方法一:列表推导式配合in关键字
shared_keys = [key for key in a.keys() if key in b.keys()]
print(shared_keys)  # 输出:['2', '3']# 方法二:利用集合的交集操作
shared_keys_set = set(a.keys()).intersection(set(b.keys()))
print(list(shared_keys_set))  # 输出:['2', '3']
4. 设置字典默认值

当访问字典中不存在的键时,可以设定默认值。这里展示了两种方式:

  • 使用dict.setdefault()方法:
d = {}
key = "foo"
d.setdefault(key, []).append("bar")
print(d)  # 输出:{'foo': ['bar']}
  • 使用collections.defaultdict类:
from collections import defaultdictd = defaultdict(list)
key = "foo"
d[key].append("bar")
print(d)  # 输出:defaultdict(<class 'list'>, {'foo': ['bar']})
5. 更新字典

使用.update()方法可将一个字典的键值对合并到另一个字典中:

a = {"1":1, "2":2, "3":3}
b = {"2":2, "3":3, "4":4}
a.update(b)
print(a)  # 输出:{'1': 1, '3': 3, '2': 2, '4': 4}
6. 合并两个字典

在Python 3.5及以上版本,可以使用解包语法合并两个字典:

a = {"x": 55, "y": 66}
b = {"a": "foo", "b": "bar"}
merged_dict = {**a, **b}
print(merged_dict)  # 输出:{'x': 55, 'y': 66, 'a': 'foo', 'b': 'bar'}

高级应用

7. 模拟字典行为

通过自定义类,可以实现类似字典的行为。下面是一个名为EmuDict的示例类:

class EmuDict:def __init__(self, dict_):self._dict = dict_def __getitem__(self, key):return self._dict[key]def __setitem__(self, key, val):self._dict[key] = val# 其他字典方法的实现...emud = EmuDict({"1":1, "2":2, "3":3})
print(emud['1'])  # 输出:1
8. 实现LRU缓存

利用OrderedDict(对于Python 3.7及以下版本)或Python 3.7以上版本的有序字典特性,可以创建一个简单的LRU缓存类:

from collections import OrderedDictclass LRUCache(OrderedDict):def __init__(self, maxsize=128):super().__init__()self._maxsize = maxsizedef get(self, k):if k not in self:return Noneself.move_to_end(k)return super().get(k)def put(self, k, v):if k in self:self.move_to_end(k)self[k] = vif len(self) > self._maxsize:self.popitem(last=False)# 示例使用...

通过上述详细解读,我们不仅掌握了Python字典的核心操作,还了解了如何运用字典解决实际问题,包括模拟字典行为和实现LRU缓存机制。这些知识无疑将深化我们对Python数据结构的理解,提升编写高质量、高性能代码的能力。

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

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

相关文章

python工具方法 45 基于ffmpeg以面向对象多线程的方式实现实时推流

1、视频推流 参考基于ffmpeg模拟监控摄像头输出rtsp视频流并opencv播放 实现视频流的推流。 其基本操作就是,安装视频流推流服务器,ffmpeg,准备好要推流的视频。 命令如下所示:ffmpeg -re -stream_loop -1 -i 风景视频素材分享.flv -c copy -f rtsp rtsp://127.0.0.1:554/…

Java数组,你想要的重点都在这。

1.数组的概述 数组 , 就可以理解为多个多个数据的组合 是程序中的容器 : 数组 , 集合框架(以后会将 : List , Set , Map) 数组存储中的数据的特点 : 依次紧密排列 , 有序的 , 可以重复的 此时的数组 , 集合框架都是在内存中对多个数据的存储 . 数组的其他特点 : 一旦初始化…

STM32 与 ARM 谁比较强大?

STM32 和 ARM 是两个不同的概念&#xff0c;STM32 是一种微控制器产品&#xff0c;而 ARM 是一家处理器架构设计和许可的公司。因此&#xff0c;无法简单地比较它们的强大程度。 STM32 是基于 ARM Cortex-M 核的微控制器产品&#xff0c;具有高性能、低功耗、低成本和易于开发等…

突破编程_C++_高级教程(多线程编程的基础知识)

1 多线程编程基础 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;每个进程至少有一个线程&#xff0c;即主线程。线程依赖于进程&#xff0c;不能单独存在。线程的主要作用是实现并发执行&#xff0c;即多个线程可以同时执行不同的任务…

怎么搭建自己的网站?

怎么搭建自己的网站 一.领取一个免费域名和SSL证书&#xff0c;和CDN 特点&#xff1a;支持Cloudflare CDN Cloudflare是全球知名的CDN提供商&#xff0c;如果你不想暴露你的源站&#xff0c;又想使用我们的二级域名&#xff0c;不需要前往Cloudflare添加域名&#xff0c;修…

【机器学习笔记】 6 机器学习库Scikit-learn

Scikit-learn概述 Scikit-learn是基于NumPy、 SciPy和 Matplotlib的开源Python机器学习包,它封装了一系列数据预处理、机器学习算法、模型选择等工具,是数据分析师首选的机器学习工具包。 自2007年发布以来&#xff0c;scikit-learn已经成为Python重要的机器学习库了&#xff…

家里台式机需要把一个网站发布到外网可用,怎么搞?--DDNS配置(动态域名解析配置)

前言 Dynamic DNS是一个DNS服务。当您的设备IP地址被互联网服务提供商动态变更时,它提供选项来自动变更一个或多个DNS记录的IP地址。 此服务在技术术语上也被称作DDNS或是Dyn DNS 如果您没有一个静态IP,那么每次您重新连接到互联网是IP都会改变。为了避免每次IP变化时手动更…

java数据结构与算法刷题-----LeetCode18. 四数之和

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 此题为三数之和的衍生题&#xff0c;代码完全一样&#xff0c;只…

全局异常处理器简单使用

一、为什么需要全局异常处理器&#xff1f; 统一异常处理&#xff1a;在应用程序中&#xff0c;可能会出现各种各样的异常情况&#xff0c;如数据库连接失败、资源不存在、权限问题等等。全局异常处理器允许我们统一处理这些异常&#xff0c;而不是在每个地方都去处理它们&…

一、Java安装JDK8

Java安装JDK8 一、Centos7.91.命令行安装2.安装包安装2.1 下载2.2 安装2.3 配置java环境 二、Windows1.下载2.安装3.配置环境变量 一、Centos7.9 1.命令行安装 yum install java-1.8.0-openjdk.x86_642.安装包安装 2.1 下载 下载地址&#xff1a;https://www.oracle.com/cn…

基于T1w/T2w 比值揭示髓磷脂相关变化

前言&#xff1a; 最近在阅读文献的时候发现2篇文章&#xff0c;是采用T1w/T2w 比值表征髓磷脂&#xff0c;有点感兴趣&#xff0c;因此尝试了一下文献所提出的方法。&#xff08;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9247578/ https://www.ncbi.nlm.nih.gov/pmc/ar…

鸿蒙开发系列教程(二十四)--List 列表操作(3)

列表编辑 1、新增列表项 定义列表项数据结构和初始化列表数据&#xff0c;构建列表整体布局和列表项。 提供新增列表项入口&#xff0c;即给新增按钮添加点击事件。 响应用户确定新增事件&#xff0c;更新列表数据。 2、删除列表项 列表的删除功能一般进入编辑模式后才可…

【C语言】Linux 内核listen系统调用代码

一、Linux 4.19内核listen系统调用代码注释 /** 开始对一个 socket 进行监听。这个函数做一些准备工作以便 socket 可以开始监听&#xff0c;* 如果操作成功&#xff0c;则将 socket 标记为准备好监听的状态。*/int __sys_listen(int fd, int backlog) {struct socket *sock…

VueCLI核心知识4:动画效果、过渡效果

1 动画效果 【代码】 <template><div><button click"isShow !isShow">显示/隐藏</button><!-- <transition name"xxx" :appear"true"> 可以指定name属性&#xff0c;也可以不指定&#xff0c;name属性在有…

Codeforces Round 926 (Div. 2)

这场比赛我觉得题目不是特别难&#xff0c;就是有点难读懂&#xff0c;基本上读懂就差不多会做了。 Problem - A - Codeforces 1.思路&#xff1a; Q1&#xff1a;首先这个题我们一定能确定一个下界答案就是最大值减去最小值&#xff0c;那么我们怎样证明下界答案就是上界答案…

数值类型的运算方式总结

提纲1&#xff1a;常见的位运算使用场景 提纲2&#xff1a;整数类型运算时的类型溢出问题&#xff0c;产生原因以及解决办法 提纲3&#xff1a;浮点类型运算时的精度丢失问题&#xff0c;产生原因以及解决办法 数值类型&#xff08;6种&#xff09;分为&#xff1a; 整型&…

六、Datax通过json字符串运行

Datax通过json字符串运行 一、场景二、代码实现 一、场景 制作一个web应用&#xff0c;在页面上配置一个json字符串&#xff0c;保存在数据库里面。在执行json的时候&#xff0c;动态在本地创建一个json文件后执行&#xff0c;并识别是否成功&#xff0c;将执行过程保存在数据…

[运行报错] Maven打包SpringBoot项目,运行报错:no main manifest attribute, in xxx.jar

文章目录 问题描述解决办法附录 问题描述 IDEA创建SpringBoot 2.6.13项目&#xff08;仅引入SpringMVC依赖&#xff09;&#xff0c;对生成的代码不做修改直接Maven打包。但运行报错&#xff1a; # java -jar xxx.jar no main manifest attribute, in xxx.jar检查jar包&…

C++数据结构与算法——字符串

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

2024年【危险化学品经营单位安全管理人员】免费试题及危险化学品经营单位安全管理人员考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员免费试题参考答案及危险化学品经营单位安全管理人员考试试题解析是安全生产模拟考试一点通题库老师及危险化学品经营单位安全管理人员操作证已考过的学员汇总&#xff0c;相对有效帮助…