python基础入门:3.2字典(Dict)与集合(Set)

Python高效数据管理:字典与集合深度剖析

# 快速导航
config = {"数据结构": "字典", "特性": ["键值对", "快速查找"]}
unique_nums = {1, 2, 3, 5, 8}  # 集合自动去重

一、字典核心操作全解

1. 键值对基础操作

# 创建与修改
user = {"name": "Alice", "age": 28}
user["email"] = "alice@example.com"  # 添加新键
user["age"] = 29                    # 修改值# 安全访问方法
print(user.get("phone", "N/A"))      # 输出N/A而非报错
print(user.setdefault("role", "user"))  # 设置默认值# 删除操作对比
del user["email"]                    # 直接删除
age = user.pop("age")                # 弹出并返回值
user.clear()                         # 清空字典

2. 高级操作方法

# 合并字典的三种方式
defaults = {"theme": "dark", "notifications": True}
custom = {"theme": "light"}# 方法1:update()
settings = defaults.copy()
settings.update(custom)# 方法2:字典解包(Python 3.9+)
merged = defaults | custom# 方法3:字典推导式
merged = {k: v for d in [defaults, custom] for k, v in d.items()}

字典操作性能对比

操作平均时间复杂度
查找元素O(1)
插入元素O(1)
删除元素O(1)
遍历所有元素O(n)

二、集合运算实战应用

1. 基础集合运算

A = {1, 2, 3, 4}
B = {3, 4, 5, 6}print(A | B)   # 并集 {1,2,3,4,5,6}
print(A & B)   # 交集 {3,4}
print(A - B)   # 差集 {1,2}
print(A ^ B)   # 对称差集 {1,2,5,6}

2. 实际应用场景

# 用户标签系统
user1_tags = {"python", "data", "ml"}
user2_tags = {"java", "data", "web"}# 寻找共同兴趣
common_tags = user1_tags & user2_tags# 推荐系统应用
recommended_tags = (user1_tags | user2_tags) - common_tags

3. 性能优化技巧

# 快速去重示例
duplicates = [2,5,2,8,5,1,8,8]
unique = list(set(duplicates))  # [1,2,5,8]# 超大数据集处理(10亿元素)
def process_big_data():seen = set()with open('bigdata.txt') as f:for line in f:element = line.strip()if element not in seen:seen.add(element)yield element

三、字典推导式与哈希原理

1. 字典推导式进阶

# 基本形式
squares = {x: x**2 for x in range(5)}  # {0:0, 1:1, 2:4, ...}# 条件筛选
students = {"Alice": 89, "Bob": 62, "Charlie": 93}
passed = {name: score for name, score in students.items() if score >= 70}# 键值反转
reverse_dict = {v: k for k, v in students.items()}

2. 哈希表原理浅析

# 哈希函数演示示例
def simple_hash(key, table_size):return sum(ord(c) for c in str(key)) % table_sizeprint(simple_hash("apple", 10))  # 输出哈希值位置

哈希表核心机制

  1. 哈希函数将键转换为整数
  2. 通过取模运算确定存储位置
  3. 处理哈希冲突(开放寻址法/链地址法)
  4. 动态扩容机制(当负载因子 > 2/3时扩容)

四、最佳实践与性能指南

  1. 数据结构选择原则

    • 需要键值关联 → 字典
    • 需要快速存在性检测 → 集合
    • 需要有序存储 → Python 3.7+ 字典保持插入顺序
    • 需要数学运算 → 集合
  2. 内存优化方案

# 使用__slots__优化字典空间
class OptimizedUser:__slots__ = ('name', 'age')  # 替代实例字典def __init__(self, name, age):self.name = nameself.age = age
  1. 性能对比测试
import timeit# 集合 vs 列表的成员检测
list_test = list(range(1000000))
set_test = set(list_test)print("列表查询:", timeit.timeit('999999 in list_test', number=100, globals=globals()))
print("集合查询:", timeit.timeit('999999 in set_test', number=100, globals=globals()))

典型测试结果

  • 列表查询:约 2.3 秒
  • 集合查询:约 0.000003 秒

扩展思考

  • 如何利用字典实现LRU缓存机制?
  • 在数据序列化时如何处理不可哈希对象?
  • 当哈希冲突严重时,如何设计更优的哈希函数?
  • 字典视图对象(keys/values/items)在动态更新时的行为特性

下节预告:迭代器与生成器——解锁Python流式数据处理能力

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

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

相关文章

【安当产品应用案例100集】036-视频监控机房权限管理新突破:安当windows操作系统登录双因素认证解决方案

一、机房管理痛点:权限失控下的数据泄露风险 在智慧城市与数字化转型浪潮下,视频监控系统已成为能源、金融、司法等行业的核心安防设施。然而,传统机房管理模式中,值班人员通过单一密码即可解锁监控画面的操作漏洞,正…

Unity抖音云启动测试:如何用cmd命令行启动exe

相关资料:弹幕云启动(原“玩法云启动能力”)_直播小玩法_抖音开放平台 1,操作方法 在做云启动的时候,接完发现需要命令行模拟云环境测试启动,所以研究了下。 首先进入cmd命令,CD进入对应包的文件…

< OS 有关 > 利用 google-drive-ocamlfuse 工具,在 Ubuntu 24 系统上 加载 Google DRIVE 网盘

Created by Dave On 8Feb.2025 起因: 想下载 StableDiffusion,清理系统文件时把 i/o 搞到 100%,已经删除到 apt 缓存,还差 89MB,只能另想办法。 在网上找能不能挂在 Google 网盘,百度网盘,或 …

【LITS游戏——暴力DFS+剪枝优化】

题目 代码 #include <bits/stdc.h> using namespace std; using pll pair<int, int>; #define x first #define y second const int N 51; pll d[4][4][4] {{{{0, 0}, {1, 0}, {2, 0}, {2, 1}}, {{0, 0}, {1, 0}, {1, -1}, {1, -2}}, {{0, 0}, {0, 1}, {1, 1},…

Redisson全面解析:从使用方法到工作原理的深度探索

文章目录 写在文章开头详解Redisson基本数据类型基础配置字符串操作列表操作映射集阻塞队列延迟队列更多关于Redisson详解Redisson 中的原子类详解redisson中的发布订阅模型小结参考写在文章开头 Redisson是基于原生redis操作指令上进一步的封装,屏蔽了redis数据结构的实现细…

用Python进行websocket接口测试

这篇文章主要介绍了用Python进行websocket接口测试&#xff0c;帮助大家更好的理解和使用python&#xff0c;感兴趣的朋友可以了解下 我们在做接口测试时&#xff0c;除了常见的http接口&#xff0c;还有一种比较多见&#xff0c;就是socket接口&#xff0c;今天讲解下怎么用P…

【RocketMQ 存储】- 同步刷盘服务 GroupCommitService

文章目录 1. 前言2. 参数3. 队列相关4. 核心逻辑 run4.1 waitForRunning4.2 doCommit4.3 flush 5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 RocketMQ 存储部分系列文章&#xff1a; 【RocketMQ 存储】- RocketMQ存储类 MappedFile【RocketMQ 存储】- 一文总结 RocketMQ 的存…

基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具&#xff0c;旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病&#xff0c;通常表现为认知障碍、记忆丧失和语言障碍等症状…

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景&#xff1a;在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法&#xff0c;如果仅为了解决BUG不论原…

【异常解决】在idea中提示 hutool 提示 HttpResponse used withoud try-with-resources statement

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

搜维尔科技:提供人形机器人传感器的应用案例分析

视觉传感器 • 家庭服务场景&#xff1a;在家庭清洁机器人中&#xff0c;视觉传感器可以识别家具、障碍物的位置和形状&#xff0c;规划清洁路径&#xff0c;避开桌椅、宠物玩具等。如小米扫地机器人&#xff0c;通过视觉传感器与算法结合&#xff0c;能构建房间地图&#xff…

虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!

不拆发动机、不测缸压&#xff0c;只测个电流也能知道哪个缸压缩有问题&#xff1f;没错&#xff01;做个相对压缩测试&#xff0c;测下起动电流就行&#xff0c;简单又实用&#xff01;今天&#xff0c;从原理到方法&#xff0c;几分钟教会你&#xff01; 我们都知道&#xf…

自然语言处理NLP_[1]-NLP入门

文章目录 1.自然语言处理入门1. 什么是自然语言处理2.自然语言处理的发展简史3 自然语言处理的应用场景1. **机器翻译**2. **文本分类**3. **情感分析**4. **问答系统**5. **文本生成**6. **信息抽取**7. **语音识别与合成**8. **文本摘要**9. **搜索引擎优化**10. **聊天机器人…

无限使用Cursor

原理&#xff1a;运行程序获得15天的免费试用期&#xff0c;重新运行程序重置试用期&#xff0c;实现无限使用。免费的pro账号&#xff0c;一个月有250的高级模型提问次数。 前提&#xff1a;已安装cursor cursor-vip工具&#xff1a;https://cursor.jeter.eu.org?p95d60efe…

LIMO:少即是多的推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型&#xff08;LLM&#xff09;中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据&#xff08;通常超过 100,000 个示例&#xff09;&#xff0c;但本文展…

一种基于Leaflet.Legend的图例动态更新方法

目录 前言 一、场景再现 1、需求描述 2、核心方法介绍 3、存在的问题 二、问题解决 1、重复解决办法 2、图例不展示解决办法 3、成果展示 三、总结 前言 在当今数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术已经广泛应用于各个领域&#xff0c;…

【AI时代】使用ollama私有化部署deepseek的过程及问题记录

文章目录 说明下载模型通过ollama下载通过modelscope下载 部署open-webui问题记录临时目录空间不足单机多卡部署后台启动 说明 对于DeepSeek的私有化部署&#xff0c;现在网上已经有很全面的资料了&#xff0c;本文主要记录部署以及部署过程中遇到的问题。目前对于这些问题&am…

使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8

文章目录 1. 安装 SDKMAN!2. 查找可用的 Java 8 版本3. 安装 Java 84. 验证安装5. 切换 Java 版本&#xff08;可选&#xff09;6. 解决 ARM 架构兼容性问题总结 可以使用 SDKMAN! 在 Mac&#xff08;包括 ARM 架构的 M1/M2 芯片&#xff09;上安装 Java 8。SDKMAN! 是一个强大…

存储异常导致的Oracle重大生产故障

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…

计算机视觉-拟合

一、拟合 拟合的作用主要是给物体有一个更好的描述 根据任务选择对应的方法&#xff08;最小二乘&#xff0c;全最小二乘&#xff0c;鲁棒最小二乘&#xff0c;RANSAC&#xff09; 边缘提取只能告诉边&#xff0c;但是给不出来数学描述&#xff08;应该告诉这个点线是谁的&a…