当前位置: 首页 > article >正文

Python程序设计强基计划10讲 · 第三讲:字典与集合——哈希表的威力

Python程序设计强基计划10讲 · 第三讲字典与集合——哈希表的威力作者培风图南以星河揽胜发布时间2026年3月31日适用对象已掌握列表、元组等序列类型的Python初学者前置知识第二讲《列表与元组——序列操作的艺术》标签Python数据结构、字典、集合、哈希表、O(1)查找、CSDN博客引言为什么说“不会用字典等于放弃效率”在Python编程中字典dict和集合set是性能最强大的内置数据结构。它们基于哈希表Hash Table实现提供平均O(1) 时间复杂度的查找、插入和删除操作。对比列表O(n) 查找字典和集合在处理以下场景时具有数量级优势学生成绩管理系统学号 → 成绩去重大量数据快速判断元素是否存在统计词频或类别计数然而许多初学者仅将字典当作“键值对容器”对以下核心问题缺乏理解为什么字典的键必须是不可变类型dict.keys()返回的是什么能直接遍历吗集合的|、、-运算符代表什么哈希冲突如何影响性能本讲将带你深入哈希表的本质系统掌握字典与集合的高级用法。你将学到字典的键约束与视图对象机制集合的数学运算与去重原理哈希表的内部结构与性能边界字典推导式的简洁表达力掌握这些你不仅能写出正确代码更能写出高效、优雅、可扩展的代码一、字典dict键值映射的王者1.1 字典的核心特性特性说明无序Python 3.7 有序插入顺序保留CPython实现保证可变支持动态增删改键唯一重复键会覆盖旧值键不可变键必须是 hashable 类型如 str, int, tuple✅ 基本操作速览# 创建d{name:Alice,age:25}ddict(nameAlice,age25)d{k:vfork,vinzip(keys,values)}# 字典推导式# 访问print(d[name])# Aliceprint(d.get(score))# None安全访问# 修改/增加d[age]26d[score]95# 删除deld[age]d.pop(score)# 返回并删除d.clear()# 清空所有1.2 键的约束为什么必须是不可变类型 哈希表原理简述字典通过哈希函数将键映射到内存地址若键可变其哈希值可能改变导致无法定位原值。✅ 合法键类型d{str_key:1,42:2,(1,2):3,# 元组不可变frozenset({1,2}):4# 冻结集合}❌ 非法键类型d{[1,2]:1,# TypeError: unhashable type: list{a:1}:2,# TypeError: unhashable type: dict{1,2}:3# TypeError: unhashable type: set}关键结论只有不可变且可哈希的对象才能作键。1.3 安全访问get() vs []方法行为适用场景d[key]不存在则抛KeyError确定键存在d.get(key)不存在返回None不确定键是否存在d.get(key, default)不存在返回default提供默认值✅ 最佳实践# 统计词频推荐word_count{}forwordinwords:word_count[word]word_count.get(word,0)1# 或使用 defaultdict进阶fromcollectionsimportdefaultdict word_countdefaultdict(int)forwordinwords:word_count[word]11.4 视图对象View Objects动态反映字典变化Python 3 中dict.keys()、dict.values()、dict.items()返回视图对象而非列表。 动态特性示例d{a:1,b:2}keys_viewd.keys()print(list(keys_view))# [a, b]d[c]3print(list(keys_view))# [a, b, c] —— 自动更新✅ 视图对象的优势内存高效不复制数据实时同步始终反映字典当前状态支持集合运算仅keys()和items()d1{a:1,b:2}d2{b:3,c:4}# 键的交集print(d1.keys()d2.keys())# {b}# 键的差集print(d1.keys()-d2.keys())# {a}注意values()视图不支持集合运算因值可重复。二、集合set无序唯一的元素容器2.1 集合的核心特性特性说明无序元素无固定顺序唯一自动去重可变支持增删frozenset不可变元素不可变同字典键要求✅ 基本操作# 创建s{1,2,3}sset([1,2,2,3])# {1, 2, 3}自动去重sset(hello)# {h, e, l, o}# 操作s.add(4)s.remove(1)# 不存在则报错s.discard(1)# 不存在不报错s.pop()# 随机弹出一个元素2.2 集合的数学运算集合支持标准的数学集合运算代码极其简洁。运算符号方法示例并集union()交集intersection()A B差集-difference()A - B对称差集^symmetric_difference()A ^ B✅ 实战示例找出两个班级的共同学生class_a{Alice,Bob,Charlie}class_b{Bob,David,Eve}commonclass_aclass_b# {Bob}only_aclass_a-class_b# {Alice, Charlie}all_studentsclass_a|class_b# {Alice, Bob, Charlie, David, Eve}优势比列表遍历快 O(n) 倍2.3 集合的去重优势场景从百万级列表中去重# 列表去重低效unique_list[]foriteminbig_list:ifitemnotinunique_list:# O(n) 检查unique_list.append(item)# 总体 O(n²)# 集合去重高效unique_setset(big_list)# O(n)unique_listlist(unique_set)# 若需列表性能对比n10⁶ 时列表方法需数分钟集合方法仅需0.1秒⚠️ 注意集合去重会丢失顺序若需保持顺序的去重可用seenset()unique[xforxinlstifnot(xinseenorseen.add(x))]三、哈希表的内部机制与性能特性3.1 哈希表如何工作哈希函数将键转换为整数哈希值取模运算index hash(key) % table_size确定存储位置处理冲突若位置已被占用使用开放寻址或链地址法。 简化示例# 假设哈希表大小为8hash(a)%83→ 存储在索引3hash(b)%83→ 冲突存入下一空位如43.2 哈希冲突与负载因子负载因子Load Factor 元素数量 / 表大小Python 默认负载因子阈值为2/3超过阈值时自动扩容通常翻倍并重新哈希所有元素。 性能影响理想情况O(1) 查找极端冲突如所有键哈希值相同退化为 O(n)但Python的哈希函数设计优良实际极少发生。3.3 时间复杂度总结操作字典dict集合set查找O(1) 平均O(1) 平均插入O(1) 平均O(1) 平均删除O(1) 平均O(1) 平均遍历O(n)O(n)对比列表查找/插入/删除均为 O(n)四、字典推导式声明式编程的利器字典推导式提供了一种简洁、高效的创建字典方式。4.1 基本语法{key_expr:value_exprforiteminiterableifcondition}✅ 经典示例# 反转字典original{a:1,b:2,c:3}reversed_d{v:kfork,vinoriginal.items()}# {1: a, 2: b, 3: c}# 过滤并转换scores{Alice:85,Bob:92,Charlie:78}passed{name:scoreforname,scoreinscores.items()ifscore80}# {Alice: 85, Bob: 92}4.2 高级用法嵌套字典推导# 创建字母频率表texthello worldchar_freq{char:text.count(char)forcharinset(text)ifchar! }# {h:1, e:1, l:3, o:2, w:1, r:1, d:1}多条件过滤# 提取长度3且首字母大写的单词words[Apple,hi,Banana,cat]long_caps{w:len(w)forwinwordsifw[0].isupper()andlen(w)3}# {Apple: 5, Banana: 6}4.3 与集合推导式的对比推导式语法示例字典{k: v for ...}{i: i**2 for i in range(5)}集合{expr for ...}{i**2 for i in range(5)}# 集合推导式自动去重squares{x**2forxin[-2,-1,0,1,2]}# {0, 1, 4}注意集合推导式用{}但无冒号否则是字典。五、典型误区与避坑指南误区1修改字典键d{a:1}kad[k]2# 修改值合法kb# 这不会修改字典print(d)# {a: 2}✅正确改键d[b] d.pop(a)误区2在遍历字典时修改它# 危险forkind:ifcondition:deld[k]# RuntimeError: dictionary changed size during iteration✅修正遍历键的副本forkinlist(d.keys()):# list() 创建副本ifcondition:deld[k]误区3认为集合有序s{3,1,4,1,5}print(s)# 顺序不确定可能是 {1, 3, 4, 5}✅若需有序唯一用dict.fromkeys(lst).keys()Python 3.7误区4滥用字典推导式导致可读性下降# 过于复杂result{transform(k):process(v)fork,vindata.items()ifvalidate(k)andfilter(v)}✅修正拆分为普通循环或提取辅助函数六、动手练习巩固哈希表应用练习1合并字典编写函数merge_dicts(d1, d2)合并两个字典。若键冲突以d2为准。练习2找出差异给定两个字符串s1和s2找出只在s1中出现的字符只在s2中出现的字符两者共有的字符练习3字典推导式实战给定列表students [(Alice, 85), (Bob, 92), (Charlie, 78)]用字典推导式创建字典并筛选出成绩≥80的学生。七、本讲小结哈希表的三大境界会用掌握基本增删改查懂理理解哈希机制、键约束、视图对象善用灵活运用集合运算、推导式提升效率与可读性。关键口诀“字典键要不可变集合天生会去重。”“查找用 dict/set别再遍历 list。”“视图对象动态连推导式建字典。”下期预告第四讲《函数与模块——代码复用的艺术》下一讲将深入解析 Python 的函数与模块机制函数定义与参数传递位置、关键字、默认值变量作用域LEGB规则与闭包模块导入机制与命名空间文档字符串与类型提示助你写出可复用、可维护、可协作的代码原创声明本文为《Python程序设计强基计划10讲》系列第三讲版权归作者所有。互动邀请你在使用字典或集合时遇到过哪些性能问题欢迎评论区交流关注我系统夯实Python数据结构基础为算法与项目开发铺路

相关文章:

Python程序设计强基计划10讲 · 第三讲:字典与集合——哈希表的威力

Python程序设计强基计划10讲 第三讲:字典与集合——哈希表的威力作者:培风图南以星河揽胜 发布时间:2026年3月31日 适用对象:已掌握列表、元组等序列类型的Python初学者 前置知识:第二讲《列表与元组——序列操作的艺…...

Stratovirt安装及使用

文章目录安装创建虚拟机安装 硬件要求 处理器架构:仅支持AArch64和x86_64处理器架构。AArch64需要ARMv8及更高版本且支持虚拟化扩展;x86_64支持VT-x。 软件要求 操作系统:openEuler 20.09及更高版本 我当前安装的stratovirt版本是2.1.0&…...

9.3LED点阵屏显示动画

#include <REGX52.H> #include "Delay.h" #include "MatrixLED.h"//动画数据 unsigned char code Animation[]{0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C,0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C,0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C, };void…...

大模型Agent-应用小记【转载】

参考资料 万字长文解读LLM Agent&#xff1a;总体框架、经典论文与实践万字长文解析Agent框架中的上下文管理策略从Claude Code入手看Agent框架设计思路&#xff08;基础篇&#xff09; Agent基础 Agent基本定义 LLM 工具调用 / 长期记忆能力 / 规划能力 上下文管理 是什…...

【豆包从入门到精通】001、初识豆包:大模型时代的入门钥匙

001、初识豆包&#xff1a;大模型时代的入门钥匙 昨天深夜调试一个嵌入式日志解析脚本时&#xff0c;我又遇到了那个老问题——正则表达式写到第三层嵌套就开始失控&#xff0c;同事的代码注释像密码本&#xff0c;而产品经理在群里催着要三个月前的异常模式统计。就在我对着满…...

Java static关键字全解析:从共享属性到工具类,一篇搞懂静态变量和静态方法

你有没有想过这些问题&#xff1a;为什么main方法是static的&#xff1f;为什么工具类的方法都是static的&#xff1f;为什么静态方法里不能直接调用非静态方法&#xff1f;今天这篇文章&#xff0c;我们就把static关键字彻底讲透。从共享属性到工具类&#xff0c;从内存原理到…...

【数据结构】顺序表的应用->通讯录(详细代码及配图)

小编主页详情<-请点击 小编gitee代码仓库<-请点击 本文主要介绍了数据结构的顺序表的应用->通讯录&#xff0c;内容全由作者原创&#xff08;无AI&#xff09;&#xff0c;同时深度解析了通讯录顺序表增删查改等功能&#xff0c;并带有配图帮助博友们更好的理解&#…...

008、系统组装与API服务化:构建完整RAG Pipeline

昨天深夜调试时遇到一个典型问题:用户问“今年Q3财报关键数据”,系统返回的却是三年前的老数据。检查发现,检索模块返回了相关文档,但排序逻辑把发布时间字段误当成相关性分数处理了。这种模块间接口不对齐的问题,在组装RAG系统时太常见了。 管道组装:不只是拼积木 很多…...

007、大语言模型集成:Prompt工程与上下文管理

昨天深夜调试时遇到一个诡异问题:同样的查询,在本地测试时LLM能准确返回产品参数,上了生产环境就总答非所问。盯着监控日志看了半小时才发现,某个微服务在拼接用户历史对话时,漏掉了两条关键消息——上下文窗口看似饱满,实则缺了核心信息。这个坑让我重新审视了RAG系统中…...

华为:渐进解锁细粒度视觉感知

&#x1f4d6;标题&#xff1a;FineViT: Progressively Unlocking Fine-Grained Perception with Dense Recaptions &#x1f310;来源&#xff1a;arXiv, 2603.17326v1 &#x1f31f;摘要 虽然多模态大语言模型&#xff08;MLLM&#xff09;经历了快速的发展&#xff0c;但其视…...

我郑重声明:我的目标是图灵奖,这是理工男的执念!所以在第一时间发现可实现AGI蓝图的时候,就给图灵奖官方邮箱发了论文PDF,这是存档+时间戳。我知道,明确知道,最终的AGI实现必然走我的路子。哈哈哈

总有人拿民科来说事&#xff0c;仔细想咱真也是民科&#xff0c;&#xff0c;&#xff0c;没啥说的&#xff0c;没混上教授的&#xff0c;那个不是民科&#xff1f;&#xff1f;&#xff1f; 不要拿民科怎么样来说事&#xff0c;我开始没说自己咋样&#xff0c;真就只想那个图…...

私域流量运营自动化 1.5 小时上手

OpenClaw 电商实战 第 2 篇 字数&#xff1a;约 10000 字 阅读时间&#xff1a;约 25 分钟 难度&#xff1a;⭐ 入门&#xff08;无需编程&#xff09; 更新时间&#xff1a;2026-04-01 写在前面 这个教程能帮你解决什么&#xff1f; 如果你是&#xff1a; ✅ 电商运营人员✅…...

LangChain与向量库集成:Document Loaders与Text Splitters

上周三凌晨两点&#xff0c;我被一个奇怪的召回问题卡住了&#xff1a;明明在PDF里写得很清楚的配置项&#xff0c;用相似问题去查向量库&#xff0c;总是返回一些边缘内容。打开调试日志一看&#xff0c;发现切出来的文本片段里&#xff0c;前半段是某个章节的结尾&#xff0c…...

CW32L012/F030灵眸X1智能小车--电机调速控制

1.认识PWM PWM&#xff08;Pulse Width Modulation脉宽调制&#xff09;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用&#xff0c;方波占空比被调制用来对一个具体模拟信号的电平…...

三菱PLC与MCGS组态农田智能灌溉系统:后发送产品梯形图原理图及IO分配与组态画面解析

基于三菱PLC和MCGS组态农田智能灌溉系统 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面上周刚把农田智能灌溉的项目收尾&#xff0c;把资料打包发给客户的时候&#xff0c;终于能瘫在椅子上喝杯冰可乐了。这个…...

【C++第二十三章】C++11

前言 &#x1f680;C11 常被称为现代 C 的起点。它不是一次零碎的小修小补&#xff0c;而是一次真正改变编程方式的大版本更新&#xff1a;从统一初始化&#xff0c;到 auto / decltype 的类型推导&#xff1b;从右值引用、移动语义&#xff0c;到完美转发&#xff1b;再到 lam…...

Redis 全量主从同步和增量主从同步详解

Redis 主从同步:全量同步与增量同步详解 Redis 主从复制是实现高可用、读写分离和数据冗余的基础。复制过程分为全量同步和增量同步两种模式。理解它们的工作原理、触发条件及配置优化,是系统分析师设计高可用 Redis 架构的关键。 📌 一、主从复制基本概念 主节点(Master…...

从熬夜改稿到一键成稿:Paperxie AI 毕业论文写作,本科生的学术通关神器

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 一、写论文的痛&#xff0c;每个本科生都懂 凌晨三点的宿舍&#xff0c;电脑屏幕亮着刺眼的光&#xff0c;Word 文…...

2026年全场景适配最值得关注的五大能源管理系统

各位读者&#xff0c;大家好&#xff01;在全球能源结构加速转型的当下&#xff0c;能源管理系统的发展至关重要。今天我要为大家介绍2026年全场景适配最值得关注的五大能源管理系统。这些系统对于企业提升能源管理的精细化、智能化水平&#xff0c;增强核心竞争力有着重要意义…...

MongoDB单节点转副本集(Docker安装版本)

为什么需要副本集&#xff1f;场景单节点副本集支持 Oplog❌✅MongoShake 同步❌✅数据备份恢复仅全量全量增量高可用❌✅核心结论&#xff1a;MongoShake 依赖 Oplog 实现实时同步&#xff0c;而 Oplog 只在副本集模式下产生。Docker Compose 配置version: 3.8 services:mongo…...

特定域名的proxy访问

不想破坏现有的proxy规则&#xff1b;某些域名需要proxy才可以上。 使用gost中的ss&#xff0c;简单搭建proxy&#xff1a;gost文档&#xff1a;https://v2.gost.run/ss/1. gost配置 服务端&#xff1a; gost -Lss://aes-128-gcm:password:8361客户端&#xff08;windows&#…...

2026届毕业生推荐的五大AI论文网站实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 倚仗自然语言处理跟学术知识图谱技术的AI开题报告工具&#xff0c;能够快速生成研究背景、文…...

2025最权威的降重复率网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 关于DeepSeek模型的学术论文&#xff0c;要着重于它的核心技术架构&#xff0c;这其中涵盖混…...

4 大类别 22 个高效的 Agentic Skills | 适用于 Claude、GPT

增强各类 AI 模型的能力&#xff0c;帮助你在写作、内容生产、研究分析、视觉表达、自动化执行等方面提升效率。 这些技能以 .md 格式编写&#xff0c;虽然这是 Claude 常用的技能格式&#xff0c;但你同样可以将内容复制到 ChatGPT 中使用。 Claude 如何创建 skill 国内用户…...

一篇吃透RNN(循环神经网络),LSTM(长短期记忆网络),BiLSTM(双向长短期记忆网络)算法,计算机小白也能轻松看懂

NLP-AHU-125&#xff08;神秘暗号&#xff09;哈喽各位CSDN的小伙伴们&#xff0c;我是一名专注AI入门干货的大学生博主&#xff5e; 相信刚接触深度学习序列模型的同学&#xff0c;都被RNN、LSTM、BiLSTM这三个“孪生兄弟”绕晕过&#xff1a;明明都是处理序列数据&#xff0c…...

Golutra:超越 IDE , 一个人,一个 AI 军团!使用赛博监工系统,指挥你的 AI 牛马

⚡ 你有没有想过&#xff0c;如何能像管理微信群一样管理你的 AI 团队&#xff0c;让多 Agent 协同工作不再是幻想&#xff01; | 以下观点都是个人使用&#xff0c;以及测评观点。 AI 工具革命的下一个阶段 如何能通过多路协同的方式调用不同的 AI 工具&#xff0c;然后又让…...

全域数学理论宇宙本源正式宣言(乖乖数学)

全域数学理论宇宙本源正式宣言 宣告日期&#xff1a;公元二〇二六年四月二日 宣告事由&#xff1a;庄严确立全域数学理论之宇宙本源核心定论&#xff0c;昭示宇宙根本运行法则&#xff0c;正式向世间宣告本理论之终极核心要义 序言 宇宙之本体、时空之本质、物质之根源&#xf…...

WarcraftHelper:魔兽争霸III终极优化指南 - 解决宽屏、帧率、地图限制三大痛点

WarcraftHelper&#xff1a;魔兽争霸III终极优化指南 - 解决宽屏、帧率、地图限制三大痛点 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在…...

【教程4>第12章>第8节】基于FPGA的图像缩放实现——图像横向压缩仿真测试以及MATLAB辅助验证

本课程学习成果预览 目录 1.软件版本 2.图像横向压缩testbench编写 3.仿真测试 4.程序操作视频 欢迎订阅FPGA/MATLAB/Simulink系列教程 《★教程1:matlab入门100例》 《★教程2:fpga入门100例》 《★教程3:simulink入门60例》 《★教程4:FPGA/MATLAB/Simulink联合开发入门与…...

遗传算法VRP问题:VRP,多车容量约束 针对物流问题,根据实际情况,设置多车多容量,采用遗传...

遗传算法VRP问题&#xff1a;VRP&#xff0c;多车容量约束 针对物流问题&#xff0c;根据实际情况&#xff0c;设置多车多容量&#xff0c;采用遗传算法分析求解&#xff0c;在matlab实现并画图&#xff0c;展示求解结果前阵子帮做物流的表哥捋了捋他们的配送问题&#xff0c;本…...