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

Python之学习笔记(六)

文章目录

  • 1. 字典(Dictionary)
  • 2. 集合(Set)
  • 3. 字典 vs 集合
  • 4. 应用场景
  • 5. 注意事项

Python中的字典( dict)和集合( set)是两种高效且常用的数据结构,适用于不同的场景。以下是它们的核心概念、操作、区别及典型应用:


1. 字典(Dictionary)

  • 定义:键值对(key-value)的无序集合(Python 3.7+ 后字典按插入顺序保留)。
  • 特点
    • 键(key)必须唯一且不可变(如字符串、数字、元组)。
    • 值(value)可以是任意类型。
  • 操作
    # 创建
    d = {"name": "Alice", "age": 25}
    d = dict(name="Bob", age=30)# 访问
    print(d["name"])        # Alice(KeyError 若键不存在)
    print(d.get("age", 0))  # 25(若键不存在返回默认值0)# 添加/修改
    d["gender"] = "Female"  # 添加新键值对
    d["age"] = 26           # 修改已有键的值# 删除
    del d["gender"]         # 删除键值对
    value = d.pop("age")    # 弹出并返回值# 常用方法
    keys = d.keys()         # 所有键的视图
    values = d.values()     # 所有值的视图
    items = d.items()       # 所有键值对的视图# 字典推导式
    squares = {x: x**2 for x in range(5)}  # {0:0, 1:1, 2:4, ...}
    

2. 集合(Set)

  • 定义:无序、不重复元素的容器。
  • 特点
    • 元素必须不可变(如数字、字符串、元组)。
    • 支持数学集合运算(并集、交集等)。
  • 操作
    # 创建
    s = {1, 2, 3}
    s = set([1, 2, 2, 3])  # {1, 2, 3}(去重)# 添加/删除
    s.add(4)                # 添加元素
    s.remove(3)             # 删除元素(KeyError 若不存在)
    s.discard(5)            # 安全删除(无异常)# 集合运算
    a = {1, 2, 3}
    b = {3, 4, 5}
    print(a | b)   # 并集 {1,2,3,4,5}
    print(a & b)   # 交集 {3}
    print(a - b)   # 差集 {1, 2}
    print(a ^ b)   # 对称差集 {1,2,4,5}# 集合推导式
    even = {x for x in range(10) if x % 2 == 0}  # {0,2,4,6,8}
    

3. 字典 vs 集合

特性字典(dict)集合(set)
存储方式键值对(key: value单一元素
有序性Python 3.7+ 保留插入顺序无序
唯一性键唯一元素唯一
元素类型键不可变,值任意元素必须不可变
查找速度O(1)(基于键)O(1)(基于元素)
典型用途数据映射、结构化信息存储去重、集合数学运算

4. 应用场景

  • 字典

    • 存储对象属性(如用户信息:{"name": "Alice", "age": 25})。
    • 快速查找表(如单词计数器:{"apple": 5, "banana": 3})。
    • JSON数据解析与存储。
  • 集合

    • 去除列表中的重复元素:unique = list(set(duplicate_list))
    • 成员关系测试(如检查IP是否在黑名单)。
    • 集合运算(如求共同好友:friends_a & friends_b)。

5. 注意事项

  • 字典:避免使用可变类型(如列表)作为键。
  • 集合:空集合必须用 set() 创建,{} 表示空字典。
  • 两者均依赖哈希表实现,查找速度极快(O(1))。

初稿,未完待续……

相关文章:

  • 统计 三个工作日内到期的数据
  • 【多线程】八、线程池
  • TS 字面量类型
  • [2025]MySQL的事务机制是什么样的?redolog,undolog、binog三种日志的区别?二阶段提交是什么?ACID怎么保证的?主从复制的过程?
  • Jasper and Stella: distillation of SOTA embedding models
  • Solr 与 传统数据库的核心区别
  • 学习黑客Linux 命令
  • Django框架介绍+安装
  • 工业元宇宙:从虚拟仿真到虚实共生
  • 【mathematica】常见命令
  • 【51单片机6位数码管显示时间与秒表】2022-5-8
  • NPP库中libnppi模块介绍
  • 启发式算法-遗传算法
  • 如何用更少的显存训练 PyTorch 模型
  • 深入理解 Spring MVC:DispatcherServlet 与视图解析机制​
  • CSDN积分详解(介绍、获取、用途)
  • Docker 使用与部署(超详细)
  • SpringCloud教程 — 无废话从0到1逐步学习
  • Mybatis学习(下)
  • python进阶(3)字符串格式化
  • 消息人士称俄方反对美国代表参加俄乌直接会谈
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 外交部:各方应为俄乌双方恢复直接对话创造条件
  • 马上评|让查重回归促进学术规范的本意
  • 专访|茸主:杀回UFC,只为给自己一个交代
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应