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

Python全栈入门到实战【基础篇 13】复合数据类型:字典(键值映射)与集合(无序去重)

前言

哈喽各位小伙伴!前面咱们学了字符串、数字这些基础类型,也掌握了列表这种有序序列——但实际开发中,仅靠这些还不够:

  • 想存储“姓名-年龄-手机号”这种“键值对应”的用户信息,用列表只能按位置存([“张三”, 20, “13812345678”]),查手机号要记索引,极不方便;
  • 想快速给一堆重复数据去重(比如[1,2,2,3,3,3]),用列表要写循环判断,效率低;
  • 想对比两个列表的“共同元素”“差异元素”,用列表遍历要写大量代码。

这些场景的最优解,就是Python的两大复合数据类型:字典(dict)集合(set)——字典是“键值映射”的宝库,能通过“键”快速定位“值”,无需记忆位置;集合是“无序去重”的利器,能一键去重、高效做集合运算。

这节咱们用“原理+实操+场景+避坑”的方式,吃透字典和集合的核心用法:

  • 字典:定义、增删改查、嵌套字典、常用方法(get()/keys()/items());
  • 集合:定义、增删改查、去重与集合运算(交集/并集/差集);
  • 字典vs集合vs列表:适用场景对比,避免用错类型。

吃透这两个类型,你就能高效处理“键值关联数据”和“去重/集合对比”场景,代码简洁度和效率直接翻倍~

文章目录

  • 前言
  • 一、前置引入:为什么需要字典和集合?
  • 二、字典(dict):键值映射的“万能容器”
    • 1. 字典的定义:键值对的集合
      • 语法
      • 示例:定义用户信息字典
      • 空字典定义
    • 2. 字典的核心操作:增删改查(高频)
      • (1)查:获取键对应的值
        • 方法1:`dict[key]`(直接访问,键不存在抛异常)
        • 方法2:`dict.get(key, default=None)`(推荐,键不存在返回默认值)
        • 方法3:`dict.keys()`/`dict.values()`/`dict.items()`(批量获取)
      • (2)增:添加新键值对
        • 方法1:`dict[key] = value`(键不存在则新增)
        • 方法2:`dict.update(other_dict)`(批量添加/更新)
      • (3)改:修改已有键的值
        • 方法:`dict[key] = value`(键存在则修改)
      • (4)删:删除键值对
        • 方法1:`del dict[key]`(键不存在抛异常)
        • 方法2:`dict.pop(key, default)`(推荐,键不存在返回默认值)
        • 方法3:`dict.clear()`(清空所有键值对)
    • 3. 字典的进阶用法:嵌套字典
      • 示例:嵌套字典(用户的详细信息)
    • 4. 字典的核心避坑要点
      • 坑1:键必须是不可变类型
      • 坑2:重复键会被覆盖
      • 坑3:字典是无序的?(Python 3.7+已有序)
      • 坑4:遍历字典时修改键会报错
  • 三、集合(set):无序去重的“高效工具”
    • 1. 集合的定义:无序不重复元素
      • 语法
      • 示例:定义集合
      • 用`set()`转换其他类型为集合
    • 2. 集合的核心操作:增删改查
      • (1)查:判断元素是否存在(`in`/`not in`)
      • (2)增:添加元素
        • 方法1:`set.add(element)`(添加单个元素)
        • 方法2:`set.update(iterable)`(批量添加元素)
      • (3)删:删除元素
        • 方法1:`set.remove(element)`(元素不存在抛异常)
        • 方法2:`set.discard(element)`(推荐,元素不存在不报错)
        • 方法3:`set.pop()`(随机删除一个元素,返回该元素)
        • 方法4:`set.clear()`(清空集合)
    • 3. 集合的核心功能:集合运算(交集/并集/差集)
      • 核心集合运算表(以`a={1,2,3,4}`,`b={3,4,5,6}`为例)
      • 示例:集合运算实战
    • 4. 集合的核心避坑要点
      • 坑1:空集合不能用`{}`
      • 坑2:集合是无序的,不能用索引访问
      • 坑3:元素必须是不可变类型
      • 坑4:集合运算返回新集合,不修改原集合
  • 四、字典vs集合vs列表:怎么选?
      • 选型口诀
  • 五、实战案例:用户信息管理系统(整合字典与集合)
  • 六、总结
  • 七、专栏订阅

一、前置引入:为什么需要字典和集合?

前面学的列表(list)是“有序序列”,但有两个明显短板:

  1. 查找元素依赖索引,无法通过“语义化标识”(比如“姓名”“手机号”)快速定位;
  2. 允许重复元素,去重需要额外写代码;
  3. 集合运算(比如找共同元素)效率低,时间复杂度是O(n²)。

而字典和集合正好弥补了这些短板:

  • 字典:用“键(key)-值(value)”对应关系存储,查找元素时间复杂度O(1)(和索引查找一样快),比如通过user["phone"]直接获取手机号,无需记位置;
  • 集合:自动去重,支持交集(&)、并集(|)、差集(-)等运算,时间复杂度O(1),处理重复数据和集合对比时效率极高。

简单说:

  • 存储“键值对应”数据(用户信息、配置参数、JSON数据)→ 用字典;
  • 去重、集合对比(共同好友、商品分类交集)→ 用集合;
  • 有序存储、按位置访问 → 用列表。

二、字典(dict):键值映射的“万能容器”

字典是Python中最常用的复合类型之一,核心是“键值对(key-value pair)”,每个键唯一对

http://www.jsqmd.com/news/487728/

相关文章:

  • Face3D.ai Pro原理剖析:UV展开算法如何保证工业标准兼容Blender/Maya/Unity
  • ANIMATEDIFF PRO提示词秘籍:三招写出让AI听懂的电影语言
  • mmdetection导出实例分割模型的onnx文件无法运行...如何解决?
  • 二叉树+排序
  • 计算机毕业设计springboot面向移动端的线上作业系统的设计与实现App 基于Spring Boot的移动端在线作业管理系统的设计与开发 面向移动设备的线上作业系统开发:基于Spring Boot
  • 【贪心】选择尽量多的不相交区间
  • 对象解构赋值:接口数据解包 10 个实战写法|JS 基础语法与数据操作篇
  • 蓝桥杯(排序)
  • mPLUG VQA图文问答实战:跨境电商商品图多语言描述自动生成
  • java之继承和多态的认识
  • 计算机毕业设计springboot温州商学院职称评审系统 基于Spring Boot的温州商学院教师职称评审管理系统设计与实现 温州商学院职称评审平台的Spring Boot架构开发
  • DeepSeek-OCR在AI办公中的应用:会议纪要OCR→Markdown→Notion同步
  • Unity面试总结
  • 雯雯的后宫-造相Z-Image-瑜伽女孩提示词模板库:20组已验证瑜伽体式+环境+服饰组合
  • LM Studio 国内高效使用指南:从下载到模型部署全流程解析
  • ssm+java2026年毕设勤工俭学管理系统【源码+论文】
  • map/filter/reduce:数组10个常用实战操作|JS 基础语法与数据操作篇
  • PIM 协议
  • C语言洛谷刷题总结7(题单【入门6】函数与结构体)
  • kkFileView 源码编译实战:从零构建最新预览服务安装包
  • 淡入淡出的button控件,源代码
  • Agentic AI提示工程:多任务学习策略的实战经验
  • # 英语听力提升方法(适合词汇量约1200的学习者)
  • 解决VSCode Remote-SSH连接失败的常见问题与排查方法
  • 【Java从入门到入土】06:String的72变:从字符串拼接到底层优化
  • 代码随想录算法训练营第九天 | 翻转字符串里的单词 、右旋转字符串
  • Qwen3-TTS-Tokenizer-12Hz实战案例:有声书制作中章节音频统一token化方案
  • SpikeTrack: A Spike-driven Framework for Efficient Visual Tracking—— 一种用于高效视觉追踪的脉冲驱动框架
  • VSCode结合EmmyLua实现Lua代码高效调试指南
  • 深入解析javax.net.ssl.SSLHandshakeException:如何修复No negotiable cipher suite错误