学Python4️⃣6️⃣ dict (2) key 的唯一性
作者:小号🎺
比较 list 和 dict ,两者最大的区别(之一)是:读取 list 中的单个表项时,经常用 list 的下标(索引),如
这里,下标 0 、 3 都是数字。
而在 dict 中,当需要读取某一个键值对时,也可以用类似的方法,但这时的下标是键(key),等于是利用key去访问 value。如
adict["akey"] = 3bdict["aname"] = 7X = cdict["张三"] + 1name = ddict["name"] + edict["name"]
(注意: list的下标放在一对方括号中,dict的下标也是放在一对方括号中。)
例如,两家公司合并,新公司的名字来自原两家公司老板的名字
aCompony = {"老板":{"name":"ABC"}}bCompony = {"老板":{"name":"XYZ"}}aNewName = aCompony["老板"]["name"] + bCompony["老板"]["name"]print(aNewName)
这就好像,list 是货架,摆满了物品,但是没有标签,dict 也是货架,摆满了物品,同时还对应着(贴好了)标签。取东西时,list 依靠位置去寻找;dict 借助标签去寻找。list 适合摆放大批量同样的物品。dict 适合存放不同类别的单件物品。
在一个 dict 里存放多个键值对(key-value pair)。查找时,依靠一个已知的 key,获得其对应的 value。很显然,这里,key必须是唯一的。即同一个 dict 里,某一个 key ,有且只有这一个。
比如,一个 dict 里,有一个 key 叫“张三”,其他的 key 就不能再叫“张三”了。
有了一个“张三”的 key ,具体是什么 value ,则根据需要而定。“张三”可以是男或女,可以是年长或年幼,卖菜的、说脱口秀的,等等
如果现实中的确有几个不同的“张三”,就必须想办法把他们区分开。学校里可以用学号,居民则用身份证号。这时,张三就是 value 了,而 key 是学号/身份证号。
例如:
students = { '26001': {'name': '张三', 'age': 18, 'male': True, 'score': 90}, '26002': {'name': '李四', 'age': 19, 'male': False, 'score': 85}, # 这里有另一个叫张三的,但学号不同 '26003': {'name': '张三', 'age': 20, 'male': True, 'score': 88},}
一个人、一件物等可能有多种属性,可以用多重嵌套的 dict 来储存相关信息。
如果字典中又嵌套了字典,读取时,可以用连写的方括号 [][]... 对其进行读取。
# 获取学号 '26001' 的学生的姓名print(students['206001']['name']) # 返回 '张三'# 修改张三的年龄students['26001']['age'] = 19# 添加一个新字段students['26001']['city'] = '北京'
dict嵌套dict,格式非常灵活。格式灵活意味着数据格式不统一。
凡事有利就有弊。如果用户自己选择了在 dict 里面存储的数据不是统一的格式,自然应该提前预料到后续处理时会出现哪些意外情况。
练习:
① 编一份作息时间表,用dict。
② 几个候选的吉祥物创意投票。用dict记录投票结果。
③ 用dict记录一份格格屋物品清单(可变自定义细节)。
④ 用dict编一份简单的英语生词表
今日实操
练习① 作息时间表
原稿
6:30 : '起床',
7:00 : '早餐',
7:30 : '上学',
8:00 : '早读',
练习② 吉祥物创意投票
手写稿:
'创意A': 68,
'创意B': 99,
'创意C': 34,
练习③ 格格屋物品登记
草稿:
拉布布:不卖,镇馆之宝
风景手绘:9.9
僵尸拼豆:99.0
此生必驾冰箱贴:随意
手抄大藏经1#:128,+V
练习④ 英语生词表
草稿
apply: 申请, 应用
bug: 昆虫, 漏洞
chance: 机会
data: 数据, 资料
eye: 眼睛, 视力, 注意, 观察
face: 脸, 表情, 面子
general: 通用的, 将军
wordlist = { 'apply': ['申请', '应用'], 'bug': ['昆虫', '漏洞'], 'chance': '机会', 'data': ['数据', '资料'], 'eye': ['眼睛', '视力', '注意', '观察'], 'face': ['脸', '表情', '面子'], 'general': ['通用的', '将军'], }
至少在PyCharm里面,list和dict的定义部分,不受Python的缩进规则约束,换行、Tab、对齐等等,都很自由。
#Python#学Python#大白话#小号#大白小号学Python#原创#分享#