python 浅谈字典dict
一、字典简介
字典(dict)是python中唯一的映射类型,他是以{ }括起来的键值对组成,在dict中的key是唯一的。在保存的时候,根据key来计算出一个内存地址。然后将key-value保存在这个地址中,这种算法叫hash算法,所以,切记dict中存储的key-value中的value是可以hash的,可以hash就是不可变。
可以hash(不可变)的数据类型:int,str,tuple,bool
不可hash(可变)的数据类型:list, dict,set
语法:{key1:value1,key2:value2,key3:value3,key4:value4...}
注意:key必须是可以hash的不可变的,value没有要求,可以保存任意的数据类型.
dict保存数据不是按照我们添加的顺序保存的,是按照hash表的顺序保存的,而hash不是连续的,所以不能进行 切片,只能通
过key来获取dict.字典在内存中保存,是无顺序的 .
二、字典的增
1、dic[new_key]=vlue
dic = {}
dic["王者荣耀"] = "最近我才知道" # dic[字典中不存在的key] = value
dic["吃鸡战场"] = "什么鬼"
print(dic) #{'王者荣耀': '最近我才知道', '吃鸡战场': '什么鬼'}
2、dic.setdefault("key",value)
执行流程:查询字典中是否存在该key,如果不存在就新增;如果存在就返回value值,不会进行新增或者修改
dic={'王者荣耀': '最近我才知道', '吃鸡战场': '什么鬼'}
dic.setdefault("宫本武藏", "很牛B")
print(dic)#{'王者荣耀': '最近我才知道', '吃鸡战场': '什么鬼', '宫本武藏': '很牛B'}
dic.setdefault("宫本武藏", "我的宫本很菜") # 如果key存在了就不会再添加了
print(dic)#{'王者荣耀': '最近我才知道', '吃鸡战场': '什么鬼', '宫本武藏': '很牛B'}
三、字典的删
1、dic.pop(key) 表示指定key删除键值对
dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
dic.pop("刘能") # 指定某个key进行删除
2、dic.popitem( ) 表示的随机删除一项,但是在python3.6以上显示的是删除最后一项
dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
dic.popitem() # 实际上是随机删除的
print(dic)#{'张无忌': '倚天屠龙记', '紫薇': '还珠格格', '王语嫣': '天龙八部'}
3、del dic[ key ] 表示删除key这一对键值对
dic={"name":"张三","age":18,"email":"123456@asd.com"}
del dic["age"]
print(dic)#{'name': '张三', 'email': '123456@asd.com'}
4、dic.clear( )清空字典
四、字典的改
1、dic[ old_key ]=new_value 表示修改key对应的value值
dic = {"张无忌":'倚天屠龙记', "紫薇":"还珠格格", "王语嫣":"天龙八部", "刘能":"乡村爱情协奏曲"}
dic['王语嫣'] = "天龙九部" # dic[已经存在的key] = 新value
print(dic) #{'张无忌': '倚天屠龙记', '紫薇': '还珠格格', '王语嫣': '天龙九部', '刘能': '乡村爱情协奏曲'}
2、dic.update(dic2) 表示把dic2中的元素添加到dic中,在dic字典中如果重复的,key-value覆盖,不重复就直接新增----------把dic2中的内容覆盖到dic中
dic={"":"alex","":"wusir","":"taibai"}
dic2={"":"小小","":"MM","":"diudiu"}
dic.update(dic2)
print(dic) #{'0': 'alex', '1': '小小', '3': 'diudiu', '2': 'MM'}
print(dic2)#{'1': '小小', '2': 'MM', '3': 'diudiu'}
五、字典的查
查询⼀般⽤key来查找具体的数据 。
1、dic[ key ] 如果存在key,就返回value,如果不存在就报错
print(dic['name'])
# print(dic['sylar']) # 报错
2、dic.get(key, “错误提示语”) 表示,如果存在key,返回value,不存在就显示提示语
dic={"还珠格格":"小燕子","倚天屠龙记":"张无忌","三国演义":"赵云"}
print(dic.get("三国演义")) #赵云
print(dic.get("青云志","没有此电视剧")) #没有此电视剧
六、相关操作
1、遍历
(1)for k in dic:print( k) 表示打印所有的key
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是什么.当成list来⽤就⾏
for key in dic.keys():
print(key)
(2)for v in dic.values :print(v) 表示打印所有的value
print(dic.values()) # dict_values([123, 'sylar', 18, '科⽐']) ⼀样. 也当list来⽤
for value in dic.values():
print(value)
(3)for k,v in dic.item(): print(k.v) 表示打印所有的键值对
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age',18), ('ok', '科⽐')])
# 这个东⻄也是list. 只不过list中装的是tuple
for key, value in dic.items(): # ?? 这个是解构
print(key, value)
(4)解构
a, b = 1, 2
print(a, b)
(c, d) = 3, 4
print(c, d)
注意:解构需要满足前后的数量保持一致。
七、字典的嵌套
dic1 = {
"name": "汪峰",
"age": 18,
"wife": {
"name": '章⼦怡',
"age": 28
},
"children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
"desc": '峰哥不会告我吧. 没关系. 我想上头条的'
}
print(dic1.get("wife").get("name"))print(dic1.get("children"))
print(dic1.get("children")[1])
python 浅谈字典dict的更多相关文章
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- python基础之字典dict和集合set
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...
- python入门14 字典dict
字典dict是无序的key:value格式的数据序列 #coding:utf-8 #/usr/bin/python """ 2018-11-11 dinghanhua 字 ...
- python中的字典(dict),列表(list),元组(tuple)
一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...
- Python 浅谈注释的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是难以下咽,几乎每个字符都要咨询他,用老师的话来说,这就是山炮编程员,所以此时的我意识到写一篇关于注释程序的重要性了,因此特地的写一篇文章帮助大家 ...
- Python 浅谈编程规范和软件开发目录规范的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...
- python基础类型(字典:dict)
字典的介绍: 字典(dict)Python中唯一的一个映射类型.他是以{}括起来的键值对组成,在dict中key是唯一的.在保存的时候,根据key来计算出一个内存地址,然后将key-value保存到这 ...
- Python内置字典;dict ,set
dict and set dict: 键-值 /重复添加 set : 键 / key不能重复 对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容.相反,这些方法会创建新的对象并返 ...
- python——Container之字典(dict)详解
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取. ...
随机推荐
- 转:VB中的API详解
在接下来的这篇文章中,我将向大家介绍.NET中的线程API,怎么样用C#创建线程,启动和停止线程,设置优先级和状态. 在.NET中编写的程序将被自动的分配一个线程.让我们来看看用C#编程语言创建线程并 ...
- EF(EntityFramework)与mysql使用,序列化问题[System.ObjectDisposedException]
在EF 中使用mysql关联取数据时,如果当前实体中包含另一个实体的list成员,而这个成员为空的话,在json序列化的时候就会报错: '((System.Data.Entity.DynamicPro ...
- SQL--server事物
事物 特点: 1.原子性:事物必须是一个自动工作的单元, 2.一致性:事物结束的时候,所有内部数据都是正确的 3.隔离性:并发多个事物时,各个事物不干涉内部数据,处理的都是另外一个事物处理之前或之后的 ...
- struts2_模型驱动
一.注意点 建立实现ModelDriven接口的action类 在该action类中,创建实体对象并new 在getModel返回该对象 在显示页面中提交的表单name正常写 二.案例 创建实体类Us ...
- mysql各种操作记录
MySQL设置数据集为UTF8仍无法输入中文的解决办法: mysql -uroot -p --default-character-set=gbk 可用命令status 和 show variables ...
- P、NP、NPC、NP-Hard问题到底是何方神圣?
最近在做一个求解有向图中回路的问题,老师说求解图中全部回路是一个NP难问题.突然想到P.NP.NPC.NP-hard的描述一致不是很清楚,所以又学习了一下. 在解释这四个概念之前,我们需要先知道两个问 ...
- SSM+Netty项目结合思路
最近正忙于搬家,面试,整理团队开发计划等工作,所以没有什么时间登陆个人公众号,今天上线看到有粉丝想了解下Netty结合通用SSM框架的案例,由于公众号时间限制,我不能和此粉丝单独沟通,再此写一篇手记分 ...
- 我为什么推荐Prettier来统一代码风格
译者按: 关于代码风格,不同的人有不同的偏好,其实并没有什么绝对的对错.但是,有2条原则应该是对的: 少数服从多数:用工具统一风格. 原文: Why robots should format our ...
- Angular6+ng-zorro实现登录页面
一.效果图 二.html代码 <div class="login-container"> <div class="login-box"> ...
- MessageChannel 消息通道
一.初识 MessageChannel 对象 通过构造函数 MessageChannel() 可以创建一个消息通道,实例化的对象会继承两个属性:port1 和 port2 port1 和 port2 ...