oeasy Python 130 字典_构造_dictionary_Constructor
# 字典_构造_dictionary_Constructor ## 回忆 - 集合操作 |英文单词|中文释义| | --- | --- | |add|添加| |clear|清空| |remove|指定删除| |discard|丢弃(删除)| |pop|弹出| - 集合运算 |运算类型|基础运算符|增强赋值运算符|对应方法名| | --- | --- | --- | --- | |交集|&|&=|intersection| |并集|\||\| |差集|-|-=|difference| |对称差集|^|^=|symmetric_difference| - 集合之间可以判断 |运算类型|英文描述|运算符| | --- | --- | --- | |是否有交集|isdisjoint|无| |是否是子集|issubset|=|  - 遇到这么个问题 - {}并不是空集 - 而是一个dict ### 回忆 |符号|例子|类型名|英文名|是否可变|是否有序|可否重复| | --- | --- | --- | --- | --- | --- | --- | |小括号|(0, 1)|元组|tuple|不可变|有顺序|可重复| |中括号|[0, 1]|列表|list|可变|有顺序|可重复| |大括号|{0, 1}|集合|set|可变|无顺序|不可重复|  - 一对 空的 大括号 - 并不是 空集 - 而是一个 `dict` - `dict` 是 什么 类型 ? ### 音高与时值 - dict 代表着 - dictionary - 字典  - 音高字典 - 根据123 - 找到 具体的音高 ``` # 音符对应字典,按简谱 1 - 7 对应 F 调下的音符(1=F 时的对应) NOTE_MAP = { '1': 65, '2': 67, '3': 69, '4': 70, '5': 72, '6': 74, '7': 76 } ``` - 力度字典 - 根据 强弱次强弱 找到 - 具体的力度 ``` # 定义强弱规律(四四拍:强=90,弱=50,次强=70,最弱=40) BEAT_VELOCITY = { 1: 90, # 第一拍(强) 2: 50, # 第二拍(弱) 3: 70, # 第三拍(次强) 4: 50 # 第四拍(弱) } ``` ### 帮助手册 - 对着dict喊救命 ``` help(dict) ``` - 缺省构造函数 生成一个空字典  - 构造方法 - 构造的是 映射关系(mapping) - 需要 key和value的pair ``` dict(one=1, two=2) ``` - 这里 给了 2个 key-value 的 pair - one=1 - two=2 - 等号 前面的 是 key - 等号 后面的 是 value ### 试试 - 把这个字典 赋给d ``` d = dict(one=1, two=2) ``` - 通过 key 查到 - key所 对应的value - 通过 "one" 可以查到 1 - 通过 "two" 可以查到 2 ``` d["one"] d["two"] ``` - one 是 要查的key  - 查one - 查得的value 是 1 - one 和 1 之间 - 有 mapping(映射)关系 ### 通讯录 - 我记得住 人名 - 但我 记不住 电话 - 查人名 得到 电话  - 建个 通信录 ### 通信录 - dict方法 给字典变量赋初值 ``` contacts = dict(oeasy="123", o2z="456") contacts ``` - 使用字典构造函数 完成赋值  - 得到字典后 - 可以查 ``` contacts["oeasy"] contacts["o2z"] ``` - 这是用 构造函数 造的字典 - 可以 不用构造函数 - 直接生成 字典吗? ### 直接赋初值 - 就像之前的 - 音高字典 一样 ``` # 音符对应字典,按简谱 1 - 7 对应 F 调下的音符(1=F 时的对应) NOTE_MAP = { '1': 65, '2': 67, '3': 69, '4': 70, '5': 72, '6': 74, '7': 76 } ``` - 直接 把字典 直接赋过去 ``` contacts = {"oeasy":123, "o2z":456} contacts ``` - 效果一样  - 元组、列表、字符串 - 好像也可以 `索引` - 有什么`区别`呢? ### 回忆列表 - 列表 用 数字 索引 ``` lst = list("oeasy") lst lst[0] lst[4] ``` - 列表 是 有序的序列 - 根据 序号数字 进行索引 - 通过 序号数字 返回 列表项  - 超出范围 - 报IndexError - 索引错误  - 那字典 怎么`索引` 的呢? ### 查询字典 - 列表 用 数字序号 索引 - 字典 用 key 索引 ``` contacts = {"oeasy":123, "o2z":456} contacts["oeasy"] contacts["o2z"] ``` - 根据 key - 查到key 对应的value - 运算符 还是 - 索引运算符[]  - 字典 会报 索引错误 吗? ### 索引不存在的值 - o3z 不是 字典的key ``` contacts["o3z"] ``` - 键(key) o3z - 索引 不到东西  - 不存在 o3z 这个key - 没法索引 - 报KeyError - 键错误 - key 怎么理解? ### key - key 就是钥匙 - 很重要!!!  - 这钥匙 干嘛 用的? ### 开锁 - 钥匙开锁 - 按一下 触发一个功能 就叫key 1. 开门的 钥匙 1. 钢琴的 琴键 1. 电脑键盘的 按键  - 钥匙是和锁 配对的 - 有钥匙 才能开锁 - 开了锁 就可以找到value - 联系人的信息 - 除了 `电话` 之外 - 可能 还包括 `地址` ### 通讯录  - 人名 映射到 电话和地址元组 - 人名:(地址,电话) ``` d = {"oeasy": (123, "bj"), "o2z": (456, "sh")} ``` - 通过"oeasy"可以 - 映射到 详细信息元组 - 元组 第0个元素 是 电话 - 元组 第1个元素 是 地址  - 1个key - 能找到 2个value 吗? ### 尝试 ``` d = {"y": "yes", "y":"yeah!"} ``` - 一个 key 可以对应 - 两个`不同的` value 么? - 试试  - key 只能有一个 - 后面的 会更新(update) 前面的  - 那我做个 `动物`的字典吧 ### 字典 ``` d = { "cat": "girl-like animal", "dog": "boy-like animal", "rat": "small animal", "elephant": "big animal" } ``` - 编字典 - 给世界 下定义 - 真好玩!!  - 在古代 - 典 不是 随便谁都能编的 - 典 这个词怎么来的呢? ### 典 - 典一般都是很有分量的 - 经典 - 典籍 - 典范 - 用典 - 引经据典  - 左右 两只手 - 中间 拿着册 - 册 是 古代的判例、案例 - 盛典 - 大典 - 典狱长 - 典当行 - 都得 靠典 ### 最早的中文字典 - 公元100年 - 许慎写出《说文解字》  - 英文中 dictionary 怎么来的呢? ### dictionary - 字典这个词来自于拉丁语 - 意思是 单词和短语的 集合  - 1220年 - Johannes de Garlandia - 加兰的约翰 - 他来自英国 - 后在法国教拉丁文 - 编写 第一本 拉丁语字典 - 为什么 不编 英文字典 呢? ### 拉丁语 - 英文 算是 - 混合了 日耳曼语、诺尔斯语、拉丁语 的 - 一种 口语方言  - 拉丁文 - 是 传统书写语言 - 来自 神圣的教廷总部 - 有 罗马帝国 战斗力的 背书 ### 盎撒征服 - 盎格鲁-撒克逊 编年史 - 由 英太祖 阿尔弗雷德 - 把 盎撒口语 落实到了 纸面  - 大不列颠岛 从此 - 成为了 盎格鲁人的岛(England) - 盎格鲁撒克逊 形成 民族认同 - 此时 还没有 英文字典 - 世界上 `第一本`英文词典 啥时候编的呢? ### 第一本英文词典 - 1604年 - 作者 Robert Cawdrey - 是 神职人员 - 普及宗教文化 - 因为 能识字的人 不多 - 世界上 第一本 英文词典 - the Table Alphabeticall - 单词表  - 面向“女士、名媛淑女 以及其他技能不熟练人” - 创造了一个临时解决方案 - 列出了 大约2,500个 “较难使用的词汇” - 词汇量 还不到 当时常用语的 5% - 神学 就是 当时最高 人文科技 ### 首页 - 前言部分 字体 为 罗马正体  - 和 今天的英语 很像 - 但是 也有些 不一样 ### 第一个单词 - 从A到Z - 按照字母表顺序 排列 - 单词字体 是 罗马正体 - 显着 正式 - 单词含义 是 哥特字体 - 向 古腾堡的不屈 致敬  - 词义 模糊 - 饮食(diet)一词 - 被描述为 进食的方式 - 没有 任何解释性的 例句 - 更不用说 追溯词源 了 - 《字母表》的词汇量 非常少 - 总共37页 - 字母W 没有任何单词 ### 新单词总结 |英文术语|中文翻译| | --- | --- | |dictionary|字典| |key|键| |value|值| |item|项| |mapping|映射| ### 总结 - 这次 接触了 字典 - 字典是用来查的 - 根据一个 key - 可以查到相应的 value  - dictionary 这个词 - 怎么来的呢??🤔 - 下次再说 👋