第六天 - 字典
程序员文章站
2022-06-27 21:58:50
1.字典简介 字典(dict) python中唯一的映射类型,根据key计算内存地址,再以key:value保存在这个地址里面 hash算法无序的 故而key必须是可hash的(如果你搞不懂什么是可哈希,暂可记成,可改变的都不可哈希的) 可哈希(不可改变)的数据类型: int,str,tuple,b ......
1.字典简介
字典(dict) python中唯一的映射类型,根据key计算内存地址,再以key:value保存在这个地址里面
hash算法无序的 故而key必须是可hash的(如果你搞不懂什么是可哈希,暂可记成,可改变的都不可哈希的)
可哈希(不可改变)的数据类型: int,str,tuple,bool
不可哈希(可改变)的: list,dict,set
字典的key必须是可哈希的,不可变 value随便改
1 # 语法 {key1:value1,key:value2,key:value3...} 2 dic ={123:456,true:999,"id":5,"name":"赛丽亚","stu":"精灵"} 3 print(dic) 4 dic ={[1,2,5]:666,} # typeerror [1,2,5] list可变的
注意:dict保存的数据不并是按我们添加进去的顺序保存的.是按hash表顺序保存的.而hash表不连续.
所以不能进行切片工作.它只能通过key来获取dict中的数据
字典的增删改查与其他操作:
dic = {123:456,true:999,"id":5,"name":"赛丽亚","stu":"精灵"}
1 # 1.增加 2 dic ["007"] = "666" # 没有出现的key会添加上 3 dic ["001"] = "策划" 4 print(dic) 5 # .setdefault() 6 # 流程 先判断key是否存在 若存在 不执行新增 若不存在 执行新增 7 dic.setdefault("001","系统") # key不存在 新增 8 dic.setdefault("001","策划") # key存在 setdefault不新增 9 print(dic)
1 # 2.删除 .pop() .popitem() .clear() del() 2 dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"} 3 dic.pop("刘能") # 指定key删除 4 dic.pop("张无忌") 5 dic.popitem() # 随机删除 6 dic.popitem() # python3.5以上显示为 按输入顺序从最后一个删除 实际底层仍是无序随机删除的 7 dic.clear() # 清空 8 del dic["刘能"] # 类似pop 但底层也删掉了 9 print(dic)
1 # 3.修改 .update() 2 dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"} 3 dic ["刘能"] = "乡村爱情" # dic[已存在的key] = 新value 修改 4 print(dic) 5 dic1 ={"张无忌":"明教教主","紫薇":"还珠第二部","乔峰":"丐帮帮主"} 6 dic.update(dic1) # 把dic1的内容覆盖到dic中 存在的key修改value 不存在的新增 7 print(dic)
1 # 4.查询 2 # 一般用 key 来查找具体的数据 3 dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"} 4 print(dic["紫薇"]) # dic[key] 输出 value 还珠格格 5 # print(dic["尔康"]) # 若key不存在 报错 keyerror: '尔康' 6 print(dic.get("王语嫣")) # dic.get[key] 输出 value 天龙八部 7 print(dic.get("小燕子")) # 若key不存在 不会报错 返回 none 8 print(dic.get("刘能","没有")) # 两个参数 若第一个参数不存在 返回第二个参数作为默认值 若存在 直接返回value 9 10 # setdefault() 新增 11 # 流程: 1.先检测是否存在 kye,xxx 12 # 2.根据你给的key查询value 13 dic = {"jay":"周杰伦"} 14 dic1 = dic.setdefault("jj","林俊杰") 15 print(dic1)
练习题
1 # 把列表转化到字典里面去 key1:[大于66的数据], key2:[小于等于66] 2 # dic = {key1:[大于66的],key2:[小于等于66]} 3 方案1: 4 dic ={"key1":[],"key2":[]} 5 lis = [11,22,33,44,55,88,66,77,99] 6 for i in lis: 7 if i > 66: 8 dic["key1"].append(i) 9 else: 10 dic["key2"].append(i) 11 print(dic) 12 13 14 方案2: 15 lis = [11,22,33,44,55,88,66,77,99] 16 dic = {} 17 for i in lis: 18 if i > 66: 19 dic.setdefault("key1",[]).append(i) 20 else: 21 dic.setdefault("key2",[]).append(i) 22 print(dic)
字典的相关操作 .keys() .values() .items()
1 dic = {"dnf":"剑魂","lol":"钻石","龙之谷":"箭神","顺火暖":"九灵","剑网三":"天香"} 2 3 print(dic.keys()) # 返回内容像列表 但不是列表 4 for i in dic.keys(): # 可以迭代 拿到的是每一个key 5 print(i) 6 7 print(dic.values()) # 所有的value返回 像列表但不是列表 8 for i in dic.values(): # 迭代 拿到的是每一个value 9 print(i) 10 11 print(dic.items()) # 返回键值对 (key,value) 12 for item in dic.items(): 13 print(item) # item是元组 (key,value)
字典遍历最好方案:
1 #好的遍历字典方案 *重点 2 for k,v in dic.items(): # item是元组 (key,value) 3 print(k,v) # 解包 拿到key,value 4 5 #相关知识 解构解包 6 # a,b = 1,2 # 等同a,b = (1,2) 7 a,b,c = 1,2,3 8 print(a,b) 9 10 #真正的字典迭代 11 for k in dic: 12 print(k) # 直接拿到的是key 13 print(dic[k]) # 拿到value
字典嵌套:
类似列表数框框,如:
1 # 字典的嵌套 2 dic = { 3 "name":"汪峰", 4 "age":48, 5 "hobby":"抢头条", 6 "代表作":["春天里","怒放的生命","存在"], 7 "wife_now":{'name':'章子怡', 8 'age':'50', 9 '爱好':'打麻将' 10 }, 11 "children":[{'id':1,"name":"汪涵"},{"id":2,"name":"汪才"}] 12 } 13 print(dic["代表作"][2]) 14 print(dic["wife_now"]["爱好"]) 15 # 改名字 16 dic["children"][0]["name"] = "汪旺" 17 dic["children"][1]["name"] = "汪财" 18 print(dic)
continue...
上一篇: Go基础编程实践(六)—— 文件
下一篇: Go基础系列(3):构建go程序