第十五章 字典与哈希:高效索引与去重

第十五章 字典与哈希:高效索引与去重
在这里插入图片描述

第十五章 字典与哈希:高效索引与去重

你做数据分析或 AI 工程,迟早会遇到这三类“性能坑”:

  • 明明只是“查一下某个 id 对应的特征”,结果写成了 O(n) 的循环,数据一大就卡死。
  • 去重/判重写得很玄学:字符串去重、样本去重、Embedding 近似去重混在一起,最后谁都不敢动。
  • join/merge 用得飞起,但一旦遇到“非结构化 key”(JSON、列表、dict),就不知道怎么稳定索引。

这一章我们把最常用、最容易被低估的基础能力讲透:字典(hash table)与哈希(hashing)
目标只有一个:让你在工程里把“查询”和“去重”写得又快又稳。


0. 本章目标与适用场景

学完你应该能做到:

  1. 识别“该用 dict/set 的地方”,避免无意义的 O(n) 循环
  2. 掌握哈希表的时间复杂度直觉:平均 O(1) vs 最坏情况
  3. 写出可维护的“索引结构”:id→记录、key→聚合、bucket→列表
  4. 用 set/dict 解决常见去重:行去重、字段去重、组合 key 去重
  5. 处理“不可哈希对象”(list/dict)并构造稳定 key
  6. 理解哈希与碰撞、以及工程上如何规避“哈希不稳定”问题

1. 字典为什么快:把“查找”从 O(n) 变成 O(1)

列表里查找:

# O(n)for row in rows:if row["id"]== target:return row 

字典索引:

# O(1) 平均 idx ={ row["id"]: row for row in rows}return idx.get(target)

当 n=10 万、100 万时,这个差距就是“能不能上线”的差距。


2. 哈希表的工作机制:你需要的工程直觉

哈希表可以理解为:

  • hash(key) → 一个整数
  • 用这个整数映射到数组位置(bucket)
  • bucket 里可能有多个元素(碰撞),再做一次比较确认

平均复杂度(工程上最常用):

  • 查找/插入/删除:O(1)

最坏情况:

  • 如果大量 key 碰撞,可能退化为 O(n)(但正常业务很少遇到)

你需要的工程直觉是:
只要 key 设计合理、hash 分布均匀,dict/set 就是你最可靠的“索引结构”。


3. 字典与集合:索引与去重的两把刀

3.1 dict:key→value(索引/映射)

  • id → record
  • token → count
  • user_id → features
  • doc_id → embedding path

3.2 set:key 的集合(判重/过滤)

  • seen_ids
  • unique_words
  • visited_nodes

最常见的去重:

seen =set() out =[]for x in xs:if x in seen:continue seen.add(x) out.append(x)

4. 数据工程中的“高频索引模式”(可直接套用)

4.1 主键索引:id → row

defbuild_pk_index(rows, key="id"

Read more

地理空间大揭秘:身份证首位数字的隐藏含义-使用WebGIS进行传统6大区域展示

地理空间大揭秘:身份证首位数字的隐藏含义-使用WebGIS进行传统6大区域展示

目录 前言 一、关于身份证的空间信息 1、身份证与省份信息 2、首位数字与区域 二、数字与空间展示可视化 1、地域及图例的前端定义 2、省份与区域信息展示 三、成果展示 1、华北地区 2、东北地区 3、华东地区  4、中南地区 5、西南地区 6、西北地区  四、总结 前言         在我们日常生活中,身份证号码是每个人独一无二的身份标识,它承载着丰富的信息,其中第一位数字更是蕴含着与地理空间紧密相关的秘密。这一位数字并非随意排列,而是与我国广袤的国土划分有着深刻的联系。通过 WebGIS(Web 地理信息系统)技术,我们能够以一种直观、生动的方式,将身份证首位数字所代表的地理区域进行可视化展示,从而揭开传统 6 大区域的神秘面纱。       中国地域辽阔,地理环境复杂多样。

By Ne0inhk
用Selenium实现一个免费的Web搜索API服务

用Selenium实现一个免费的Web搜索API服务

用Selenium实现一个免费的Web搜索API服务 * 一、引言:为什么我们需要这个工具? * 二、核心思路:模拟人类,获取数据 * 三、分步实现 * 1、搭建搜索服务端(`server.py`) * 2、创建客户端(`client.py`) * 四、如何运行? * 1. 启动服务端 * 2. 测试客户端 * 五、实际应用:集成到AI智能体 * 示例:在LangChain中使用 * 五、结语 一、引言:为什么我们需要这个工具? 在AI智能体(Agents)飞速发展的今天,让它们能够“联网思考”已成为刚需。想象一下,你的AI助手不仅能回答训练数据中的问题,还能实时获取最新的新闻、股价、科研成果——这就像给盲人恢复了视力。 然而,现实很骨感:主流的搜索API服务(如Google

By Ne0inhk

2026.1.4 html简单制作

HTML: 常用属性:id(唯一标识)、class(批量样式)、src(资源地址)、href(跳转地址 标准 HTML 文档有固定结构:<!DOCTYPE html> + <html> + <head> + <body> 核心组成是双标签(闭合)和单标签(自闭合),属性用于扩展标签功能 HTML 是网页结构标记语言,非编程语言,负责定义 “页面有什么” 常用标签: 文本排版标签: * 标题:<h1>(最大)~ <h6>(最小),自带加粗和上下间距 * 段落:<

By Ne0inhk

Flutter 三方库 xpath_selector 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、精准的 HTML/XML 数据抓取与 Web 结构解析引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 xpath_selector 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、精准的 HTML/XML 数据抓取与 Web 结构解析引擎 在鸿蒙(OpenHarmony)系统的网络爬虫、自动化测试审计、或者是从复杂的第三方 Web 公告(HTML)中提取关键数据(如新闻标题、资产负债表)时,如何摆脱凌乱的正向正则(Regex),转而使用业界标准的 XPath 语法进行语义化选取?xpath_selector 为开发者提供了一套工业级的、基于 Dart 的 HTML/XML 结构化查询方案。本文将深入实战其在鸿蒙端数据治理中的应用。 前言 什么是 XPath Selector?

By Ne0inhk