Skip to content

Latest commit

 

History

History
403 lines (274 loc) · 10.2 KB

237-532196-字典_键值对_key_value_pair.sy.md

File metadata and controls

403 lines (274 loc) · 10.2 KB
show version enable_checker
step
1.0
true

字典类型

回忆

  • 上次学习了字典
  • 字典是用来查的
    • 根据一个 key
    • 可以查到相应的 value
  • 字典从汇编的角度如何理解?🤔

汇编理解

图片描述

  • 字典的指令是BUILD_CONST_KEY_MAP
  • 核心是建立映射(map)
    • 建立一个元组('o','z')
    • 到两个常量
      • 1
      • 2
    • 之间的映射
  • 字典还可以怎么建立?
  • 查查帮助

帮助

图片描述

  • 试试去

本质

  • 这次调用了一个KW函数

图片描述

  • 核心也是建立映射(map)
    • 建立从 keyvalue 的映射
  • 去游乐场玩玩

查询字典

  • 根据这个 key
    • 就能查到这个 value
    • 所用的运算符是索引运算符[]

图片描述

  • 注意中括号在这里
    • 有点像列表的索引
  • 列表是有序的序列
    • 根据序号数字进行索引
      • 通过序号数字找到列表项返回
    • 超出列表范围报IndexError
      • 索引错误

图片描述

  • 那字典呢?

字典特性

  • 字典是键值对的集合
    • 根据唯一的键(key)进行索引
      • 通过键来找到相应的字典项
    • 不存在的列表项报出KeyError
      • 键错误

图片描述

  • 根据这个 key
    • 就能查到这个 value
    • 或者说 map 映射到这个 value 上
  • 反过来,根据value
    • 就不能查到这个key
  • 所以说索引的东西必须是key
    • key很重要!!!

图片描述

字典大小

  • 字典里面有几个记录呢
    • 用 len 看看

图片描述

  • 有3条字典项
    • 怎么看呢?

图片描述

  • 好像这个可以看到字典的keys

keys

图片描述

  • 这好像一个列表

图片描述

  • 实际上是一个集合

图片描述

遍历keys

  • 转化为集合

图片描述

  • 列出keys

图片描述

  • keys确实可以都列出来
    • 通过key就可以找到相应的value吗?

遍历key,根据key找value

  • 尝试

图片描述

  • 确实可以
  • 我可以直接找所有value吗?

图片描述

所有的values

图片描述

  • 确实可以将value全部遍历出来

图片描述

  • value可以相同吗?

value可以相同

图片描述

  • value 是可以相同的
  • key 可以相同吗?

key不可以相同

  • 如果相同的话
    • 后面的会更新前面的

图片描述

  • 所以keys()返回的是一个set类型的对象
  • set两个特点
    1. 无序
    2. 唯一性
  • key就有这个特点
    • 字典中key是唯一的
    • 字典其实就是key的集合
      • 每个key都有自己的value
  • 可以一下子把key和value都查出来吗?

图片描述

items

图片描述

  • items()返回的是一个集合类的对象
    • 集合中的内容是字典项
    • 字典项是键值对的元组

图片描述

  • 字典是一个键值对的集合
  • 我们去遍历一个真实的字典

遍历字典

图片描述

  • 是items方法
  • 这样我们就可以得到python中的各种默认模块

图片描述

  • 可以根据包(module)名来的得到包的相关信息
    • 有的是内置的(built-in)
    • 也有的是对应一个python文件

字典(dict)的结构

  • list、tuple、dict 和 int、str 一样
  • 都是最最基本的存储变量的数据结构类型
  • 是 python 的基础!

图片描述

  • 本质上来说
    • keys 是一个键的集合
    • values 是一个值的列表
    • 这俩列表是有对应关系的
  • 可以通过两个有关系的列表构建字典么?

字典中的结构

  • 字典的本质是键值对的集合
    • 都有什么键?
      • d.keys()
    • 都有什么值?
      • d.values()

图片描述

  • 我可以通过字典生成
    • 键列表和值列表
    • 可以反过来吗

构建

图片描述

  • 可以把有关列的两个列表
  • 压制成一个字典

图片描述

  • 确实可以通过两个列表 zip 出一个字典
  • 在python的网站也提到过

构造方法

  • 这次去 docs.python.org 去查dict
  • 有很多种构造函数
    • 以下方法都可以
    • 而且是等价的

图片描述

  • 第3行提到的就是zip
  • 如何理解 zip 呢?

zip

图片描述

  • zip 把若干个元组的元素
    • 按照所在位置
    • 组合成新的元组
    • 直到其中某个元组遍历完成
    • zip 的结果可以理解为元组的序列

图片描述

  • 可以再构成
    • 序列类的列表、元组等
    • 或者序列类的字典
  • 字典 dict 还有其他的构造方法
  • 查询手册

动手试试

  • 二维列表

图片描述

  • 可以把列表的列表转化为字典

图片描述

  • 可以把元组的元组转化为字典
  • 那么 元组的列表 或者 列表的元组呢?

手动

图片描述

  • 元组的列表和列表的元组 都没有问题

图片描述

  • 只要满足内层序列元素是一对一的键值对映射关系就可以
  • 序列类的列表和元组可以转化为字典
  • 字典可以转化回来么?

尝试

图片描述

  • 只能把 keys 或者 values 分别转化为
    • dict_keysdict_values类型的变量
    • 然后再用list、tuple的构造方法转化
  • 来回来去我们都可以转化

音译汉、汉译英

  • 如果值也是唯一的
    • 可以键值对调
    • 依然是一对一的键值对映射

图片描述

  • 英译汉

    • 倒过来
      • 就是汉译英
  • 第一本英译汉和第一本汉译英词典

    • 其实是一个人制作的

华英字典

  • 马礼逊于1782年生于苏格兰
    • 曾在伦敦跟一位广东人学习汉语
  • 1807年9月
    • 马礼逊初来广州
    • 因当时中国禁教
    • 为偷偷传教
    • 马礼逊希望融入中国百姓的生活
    • 学习中国话
  • 1808年6月
    • 返回澳门
    • 马礼逊已经熟练掌握了粤语和官话
  • 1808年开始
    • 马礼逊以《康熙字典》为据
    • 开始编写成了三部分六卷本的《华英字典》

图片描述

  • 1818年
    • 在马六甲创办英华书院
    • 活字版印刷所
    • 翻译出版《新约全书》、《新旧约全书》 -1823年12月
    • 梁发被马礼逊按立为第一个基督新教的中国籍牧师
    • 他协助马礼逊做印刷工作
    • 梁发在1832年用中文写了一本《劝世良言》
    • 于乡试时派发给赴考生员
    • 后被三次府试失利的洪秀全看到
      • 洪秀全通过脑补解决了心理问题
      • 成为了耶稣的弟弟

华英字典

  • 《华英字典》
    • 有例句及解释
    • 其中收录大量成语、俗语

图片描述

  • 全书共6册,共4,595页,分三部分:
    • 第一部分:共3册
      • 以部首排列的汉英字典
      • 收录汉字字头达四万馀
      • 每汉字下附多音节词和成语
      • 首创自左至右横排
      • 方便中英对照
      • 是为中国第一部横排字典
    • 第二部分:共2册
      • 是以字母音序排列的汉英同音字典
      • 是为中国最早的同类型同音字典
    • 第三部分:只1册
      • 是以英文查中文的英汉字典

华英字典

  • 华英字典
    • 是中国境内最早用西方铅合金活字排印的第一部中文书籍
    • 成为经典教科书
    • 被多个出版社再版

图片描述

  • 字典里面引用了
    • 三字经
    • 论语
    • 红楼梦

图片描述

  • 我们先去总结一下

总结

  • 这次学习了字典
  • 字典是用来查的
    • 根据一个 key
    • 可以查到相应的 value
  • 字典项就是 key-value 键值对
  • 字典的本质就是键值对的集合
    • set of key-value pair
  • 字典编出来就是让人来查的
  • 具体来说怎么查字典呢?🤔
  • 下次再说 👋