第六天 - 字典

news/2024/10/17 1:26:38/

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...

转载于:https://www.cnblogs.com/xi1419/p/9838586.html


http://www.ppmy.cn/news/394948.html

相关文章

面向亿万级用户的QQ一般做什么?——兴趣部落的Web同构直出分享

作者:李强,腾讯web开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。 一、什么是同构直出? 直出这个名词是在node出现后才有的,在node出现前叫做服务端渲染。 所以可以把直出定义为:“…

Python基础总结(一、二) 基础知识及流程控制

目录 第一章 Python基础知识(简略) 一、良好的代码格式(可提升代码的可读性) (一)注释: (二)缩进: (三)输入输出: &…

包体的入门到精通

前言 本人在《龙之谷》负责资源管理工作一年多,积累相当多的打包经验。经验都写成博客,所以写一个总结篇,整理一下思路和感悟。 版本管理 版本管理,要从多平台、多渠道、多服务器、多语言等维度进行版本管理。 功能拆分 多平…

Unity 简单RPG对话系统——龙之谷2的NPC对话系统

Unity 简单RPG对话系统——龙之谷2的NPC对话系统 龙之谷2手游正式上线后不久,试玩了十几分钟(包括捏脸的5分钟),之后就再也没有打开过了。 本文章将对龙之谷2的NPC对话系统进行高仿,同时考虑到 策划可能不断修改对话内…

龙之谷和服务器中断,龙之谷2手游进不去怎么办 游戏进不去断开连接解决方法[多图]...

龙之谷2手游目前已经开服,很多玩家都发现进不去游戏,那么遇到这个问题如何解决呢,同时如何才能登陆游戏,下面一起来看看吧。 龙之谷2游戏进不去断开连接解决方法 1.登录超时 在登录游戏时,若遇到带有“登录超时”字样的…

龙之谷怎么进去服务器维护,龙之谷2手游进不去怎么办?龙之谷2登录超时解决方法...

龙之谷2手游进不去怎么办?有不少玩家发现龙之谷2游戏登不上,甚至有卡退的情况,下面小编为大家带来相关问题的解决办法,感兴趣的小伙伴快来一起看看吧! 1.登录超时 在登录游戏时,若遇到带有“登录超时”字样…

win7 php乱码,打开网站php出现乱码问题的解决办法nsiserror解决办法win7黑屏解决办法龙之谷报错解决办...

问题:用浏览器打开写好的php文件,然后发现中文字符显示为问号,网站显示不正常 原因:出现乱码的问题的原因是数据库,浏览器和php文件采用的编码方式不相同 解决办法: 1.浏览器编码方式修改:(以谷…

AMD三核、六核安装SQL2000

主板:微星MAG B550M MORTAR 迫击炮 CPU:AMD锐龙R5 5600G 公司旧电脑坏了,年前装的电脑,用来装SQL管家婆的。 SQL2000在win10系统中装不上,后来装的SQL2005,总算可以运行管家婆了,但是BUG太多…