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

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))。

初稿,未完待续……

http://www.xdnf.cn/news/3860.html

相关文章:

  • Prompt compress 技术探究-LLMLingua
  • SpringAi接入DeepSeek大模型
  • SurfSense开源程序是NotebookLM / Perplexity / Glean的开源替代品,连接到外部来源,如搜索引擎
  • ArrayList的扩容机制(源码解析)
  • 深度学习的简单介绍
  • PISI:眼图1:眼图相关基本概念
  • 使用synchronized关键字同步Java线程
  • AndroidLogger常用命令和搜索功能介绍
  • STM32Cube-FreeRTOS任务调度与任务管理-笔记
  • ruoyi-flowable框架关于启动时提示锁住问题
  • LLM论文笔记 27: Looped Transformers for Length Generalization
  • n8n工作流自动化平台的实操:利用本地嵌入模型,完成文件内容的向量化及入库
  • 【Linux网络#3】:Socket编程应用层UDP
  • Scartch038(四季变换)
  • MCP智能体多Agent协作系统设计(Multi-Agent Cooperation)
  • 模型部署——cuda编程入门
  • C语言内存函数详解:从基础到实战
  • 2025年渗透测试面试题总结-拷打题库38(题目+回答)
  • profile软件开发中的性能剖析与内存分析
  • 数据库Mysql_联合查询
  • Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)
  • 双列集合——map集合和三种遍历方式
  • React实现B站评论Demo
  • 分布式系统中的 ActiveMQ:异步解耦与流量削峰(一)
  • Dify 完全指南(一):从零搭建开源大模型应用平台(Ollama/VLLM本地模型接入实战)》
  • Github2025-05-04php开源项目日报 Top10
  • 详解迁移学习,模型参数冻结,优化器参数定义
  • 传感器数据处理笔记
  • Linux中的粘滞位和开发工具和文本编辑器vim
  • 马小帅面试遇“灵魂拷问“