# GESP等级：四级 | GESP Python 四级考点
"""
================================================================================
 总结与拓展 ☆ — set + dict 知识图谱
================================================================================

  本文件是对第5节全部知识的系统总结，并提供拓展学习方向。
================================================================================
"""

print("=" * 60)
print(" 总结与拓展 ☆ — set + dict 知识图谱")
print("=" * 60)

# ========== 知识图谱 ==========
print("""
┌─────────────────────────────────────────────────────────────────────┐
│                     set + dict 知识图谱                             │
├──────────────────────┬──────────────────────────────────────────────┤
│     set（集合）       │              dict（字典）                    │
├──────────────────────┼──────────────────────────────────────────────┤
│  无序、不重复         │  键值映射、可变                             │
│  时间复杂度 O(1)      │  查询/插入/删除 平均 O(1)                   │
│                       │                                              │
│  核心操作：            │  核心操作：                                  │
│  ├─ add / remove /    │  ├─ get / setdefault / update               │
│  │  discard / pop     │  ├─ keys / values / items                   │
│  ├─ & 交集            │  ├─ pop / popitem                           │
│  ├─ | 并集            │  ├─ dict 推导式                             │
│  ├─ - 差集            │  ├─ 嵌套 dict 做树形结构                    │
│  ├─ ^ 对称差集        │                                              │
│  ├─ <= < 子集判断     │  常见模式：                                  │
│  ├─ >= > 超集判断     │  ├─ 配置容器（Key-Value 配置项）             │
│                       │  ├─ 计数器（collections.Counter）            │
│  常见模式：            │  ├─ 分组聚合                                │
│  ├─ 数据去重           │  ├─ 反向映射（value → key）                 │
│  ├─ 快速成员判断       │  ├─ 缓存/记忆化                            │
│  ├─ 标签系统           │  ├─ JSON 序列化                            │
│  ├─ 已访问集合(visited)│                                              │
│  ├─ 集合运算做对比     │  set + dict 组合模式：                      │
│                       │  ├─ set 去重 + dict 映射（挑战1）           │
│                       │  ├─ dict 配置 + set 状态管理（挑战2）        │
│                       │  ├─ dict 画布 + set 颜色跟踪（挑战3）        │
│                       │  ├─ dict 继承 + set 循环检测（进阶）        │
│                       │  └─ 数据清洗流水线                          │
└──────────────────────┴──────────────────────────────────────────────┘
""")

# ========== 复杂度对比 ==========
print("=" * 60)
print(" 时间复杂度速查表")
print("=" * 60)
print("""
  操作               set         dict         list
  ─────────────────────────────────────────────────
  查找元素           O(1)        O(1)         O(n)
  插入               O(1)        O(1)         O(1) 尾部
  删除               O(1)        O(1)         O(n)
  成员判断           O(1)        O(1)         O(n)
  遍历               O(n)        O(n)         O(n)
  取交集/并集/差集   O(n)        —            —

  总结：需要「快速查找/去重/集合运算」→ set
        需要「键值映射/配置管理/缓存」→ dict
""")

# ========== 各文件要点回顾 ==========
print("=" * 60)
print(" 各文件要点回顾")
print("=" * 60)

highlights = {
    "01_挑战1": [
        "set 推导式清洗脏数据（strip + capitalize）",
        "dict.get() 安全查询 vs 直接索引",
        "set - dict.keys() 发现缺失映射",
        "dict.setdefault() 构建反向映射表",
    ],
    "02_挑战2": [
        "dict 做配置容器 + 类型/值域校验",
        "set 管理活跃画笔状态",
        "集合运算（-、|、&）做批量状态切换",
        "dict 深拷贝做配置快照与回滚",
    ],
    "03_挑战3": [
        "dict 画布 (x,y)→color 映射",
        "set 自动跟踪已用颜色",
        "多层数据结构的组合设计",
        "画布统计（dict 频次 + set 集合）",
    ],
    "04_练习1": [
        "数据清洗：规范化 → 去重 → 补全 → 分类",
        "set 过滤缺失值 + dict 保留最佳记录",
        "hex→RGB 转换与亮度分类",
    ],
    "05_练习2": [
        "嵌套 dict 管理多配置方案",
        "set 对比方案差异（仅A有/仅B有/共有）",
        "配置合并与完整性校验",
    ],
    "06_练习3": [
        "set 模拟颜色混合（成分并集/交集）",
        "dict 管理多图层 + 合成渲染",
        "set 做泛洪填充的 visited 集合",
        "dict↔JSON 序列化（tuple→string）",
    ],
    "07_进阶": [
        "配置继承链解析（dict 线性 MRO）",
        "set 检测循环继承",
        "逐层合并实现多级继承",
        "缓存解析结果（用 dict 做 memoization）",
    ],
    "08_综合项目": [
        "turtle 画图 + dict 调色板 + set 历史记录",
        "键盘事件驱动 + 配置实时更新",
        "完整项目结构：配置/映射/历史/统计",
    ],
}

for file_key, points in highlights.items():
    print(f"\n  {file_key}.py：")
    for p in points:
        print(f"    • {p}")

# ========== 拓展方向 ==========
print()
print("=" * 60)
print(" 拓展学习方向")
print("=" * 60)
print("""
  1. collections 模块：
     - defaultdict: 带默认值的 dict（省去 setdefault）
     - Counter: 自动计数（dict 子类）
     - OrderedDict: 有序字典（Python 3.7+ 中 dict 已有序）
     - ChainMap: 多字典合并视图

  2. 高级 dict 技巧：
     - dict 作为 switch/case 替代
     - dict 实现有限状态机（FSM）
     - __missing__ 自定义缺失值处理
     - 用 dict 做树/Trie/图

  3. 高级 set 技巧：
     - frozenset: 不可变集合，可做 dict 的 key
     - set 实现布隆过滤器的简化版
     - 位运算加速：| & ^ 替代循环

  4. 实战项目方向：
     - 用 dict + set 实现简易图数据库
     - 用 dict + set 实现拼写检查器
     - 用 dict + set 实现配置文件解析器
     - 用 dict + set 实现简易 ORM 的字段映射

  5. 性能优化：
     - 大数据量时 set/dict 的内存占用分析
     - __hash__ 和 __eq__ 的自定义实现
     - 用 __slots__ 减少对象内存
     - 用 sys.getsizeof 观察不同数据结构的实际内存

  推荐继续学习：
     - 11_函数进阶
     - 12_文件操作
     - 13_面向对象
""")

print("=" * 60)
print(" 第5节 set + dict 综合创意课 完结")
print(" 共 10 个文件，涵盖 ★ → ★★★ 三个难度级别")
print("=" * 60)

if __name__ == "__main__":
    # 统计各文件的代码行数（用于展示学习量）
    import os

    base_dir = os.path.dirname(__file__)
    total_lines = 0
    file_info = []

    for fname in sorted(os.listdir(base_dir)):
        if fname.endswith(".py"):
            fpath = os.path.join(base_dir, fname)
            with open(fpath, "r", encoding="utf-8") as f:
                lines = len(f.read().splitlines())
            total_lines += lines
            file_info.append((fname, lines))

    print(f"\n  本节代码总量：{total_lines} 行（{len(file_info)} 个文件）")
    for fname, lines in file_info:
        print(f"    {fname:30s} {lines:4d} 行")
