1.12 dict 字典表
dict 字典表属于映射分类
dict的声明
>>> #dict类型 是 {}中包含若干个键值对
>>> d = dict()
>>> d = {}
>>> type(d)
<class 'dict'>
>>> #看来 一个键值对也没有的{}也是dict类型的
>>>
>>> # 1 用{}来声明键值对
>>> man = {'name':'Mark','height':1.8,'weight':80}
>>> #创建这个dict类型对象man 用来记录一个人的基本信息,姓名、身高、体重
>>>
>>> # 2 用dict()函数将参数转化为dict数据类型
>>> man1 = dict('name'='Mark','height'=1.8,'weight'=80)
SyntaxError: keyword can't be an expression
>>> man1 = dict(name='Mark',height=1.8,weight=80)
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Mark'}
>>>
>>>
>>> # 3 将list类型的转化为dict
>>> l = [('name','Mark'),('weight',80)]
>>> d = dict(l)
>>> d
{'weight': 80, 'name': 'Mark'}
>>>
>>> # 4 将tuple类型的转化为dict
>>> t = (('name','Mark'),('weight',80))
>>> dd = dict(t)
>>> dd
{'weight': 80, 'name': 'Mark'}
>>>
>>>
>>> # 5 创建只有键,值全部为None的dict
>>> keys = ['name','weight','height']
>>> ddd = dict.fromkeys(keys)
>>> ddd
{'weight': None, 'name': None, 'height': None}
>>>
>>>#特别说明,字典表的键必须是不可变类型的
#目前所学的字典表中的键值对都是无序的
获取dict中的键值对
# 1 判断一个键是否在dict中存在
>>>man1 = dict(name='Mark',height=1.8,weight=80)
>>> 'name' in man1
True
>>> 'Name' in man1
False
>>>
# 2 访问dict中某一个建的值
>>> man1['name']
'Mark'
>>>
>>> #这样访问很方便,但要确定键是存在的,不然会报错
>>> man1['Name']
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
man1['Name']
KeyError: 'Name'
>>>
# 为了使键在dict中不存在时获取键的值时不会报错或者提示一些个性化定制的信息时,可用get()函数
>>> man1.get('name')
'Mark'
>>>
>>> man1.get('Name')
>>> man1.get('Name','这个键在字典表中不存在哦')
'这个键在字典表中不存在哦'
>>>
# 3 嵌套的字典的元素访问
>>> man = {'name':{'姓':'王','名':'大锤'}}
>>> #如果想获得姓
>>> a = man['name']
>>> a
{'姓': '王', '名': '大锤'}
>>> b = a['姓']
>>> b
'王'
>>>
>>> #把这两步合在一起就是
>>> man['name']['姓']
'王'
>>>
# 4 dict中的键值对的遍历
# 4.1 获取dict中的键
>>> man1.keys()
dict_keys(['weight', 'height', 'name'])
>>>
# 4.2 获取dict中的值
>>> man1.values()
dict_values([80, 1.8, 'Mark'])
>>>
# 4.3 获取dict中的键值对
>>> man1.items()
dict_items([('weight', 80), ('height', 1.8), ('name', 'Mark')])
>>>
# 4.1、4.2、4.3中获取都是可迭代对象,不仅可以用来转换成其他类型的可迭代对象,还可以用来遍历
# 4.4 将 man1.values()转换成list类型
>>> list(man1.values())
[80, 1.8, 'Mark']
>>>
# 4.5 遍历man1.values()
>>> for i in man1.values():
print(i)
80
1.8
Mark
>>>
# 4.6 man1.items()返回的是键值对,如果遍历时想对键值对中的键、值分别操作,可以如下操作
>>> for k,v in man1.items():
print(k,'----',v)
weight ---- 80
height ---- 1.8
name ---- Mark
>>>
# 对,就是这样,从man1.items()取出的一个键值对的形式是('weight', 80),这个形式不就是元组嘛
#所以 k,v in man1.items() 就是把取出的每一个键值对组成的元组的第一个元素赋值给k,第二个元素赋值给v,而第一个
第二个元素分别就是键值对的键、值
dict的特性
特性 一:通过键(key),而非索引访问数据。k-v键值对
特性 二:值为任意对象的无序集合,而键必须是不可变类型的数据类型
特性 三:可变长度(键值对的对数是可改变的),异质(值可以是不同的数据类型),可任意嵌套(值还可以是一个dict,并且可以嵌套n多层)
特性 四:属于'可变映射'分类
特性 五:对象引用表(Hash Table),这个类似于list中的元素的访问法方式,dict中的键和作为值的对象的物理地址绑定在一起,这样通过键就能找到值
# 1 字典表的复制
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Mark'}
>>> man = man1.copy()
>>> man
{'weight': 80, 'height': 1.8, 'name': 'Mark'}
>>>
# 2 清空字典表中的键值对
>>> man.clear()
>>> man
{}
>>>
# 3 修改dict中键值对中键对应的值
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Mark'}
>>>
>>> man1['name'] = 'Tony'
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Tony'}
>>>
# 4 拼接两个dict
>>> d = dict(staff_id = ')
>>> d
{'}
>>>
>>> man1.update(d)
>>> man1
{'}
>>>
# 5 删除dict中的键值对
# 5.1 用全局函数 del()
>>> man1
{'}
>>>
>>> del man1['staff_id']
>>> man1
{'}
>>>
>>> #如果要删除的键值对的键在dict中不存在会如何
>>> del man1['staffpost']
Traceback (most recent call last):
File "<pyshell#132>", line 1, in <module>
del man1['staffpost']
KeyError: 'staffpost'
>>>
# 5.2 用dict自带的pop()函数进行键值对的删除
>>> man1
{'}
>>> man1.pop('post_id')
'
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Tony'}
>>>
>>> man1
{'}
>>> man1.pop('post_id')
'
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Tony'}
>>>
>>> #如果要弹出的键不存在
>>> man1.pop('staffpost')
Traceback (most recent call last):
File "<pyshell#140>", line 1, in <module>
man1.pop('staffpost')
KeyError: 'staffpost'
>>>
>>> #pop()函数可以再加一个参数,用来在键不存在的时候输出,代替报错:KeyError
>>> man1.pop('staffpost','该键不存在哦')
'该键不存在哦'
>>>
# 6 获取字典表的键值对数目
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Tony'}
>>> len(man1)
3
>>>
1.12 dict 字典表的更多相关文章
- 第三天:字典表dict、元组tuple、文件与类型汇总
1.字典表dict 声明 {键: 值,...} dict(键=值) d = {'isbn':'13123','title':'python入门'} #字典表中的键不能使用诸如列表这种可以改变的,只能使 ...
- Redis原理再学习04:数据结构-哈希表hash表(dict字典)
哈希函数简介 哈希函数(hash function),又叫散列函数,哈希算法.散列函数把数据"压缩"成摘要,有的也叫"指纹",它使数据量变小且数据格式大小也固定 ...
- python的dict()字典数据类型的方法详解以及案例使用
一.之前的回顾 # int 数字 # str 字符串 # list 列表 # tuple 元组 # dict 字典 字典中最重要的方法 keys() values() items() get upd ...
- 数据类型:list列表[]、元祖tuple()、dict字典{}
List 列表[] 可变的 lst = [1,2,3,4] #改 lst[(元素下标)] = '需要修改的' #通过下表修改 lst[下标:下标] = '需要修改的' #通过范围修改 #加 lst.a ...
- Python 全栈开发:dict(字典)常用方法操作、dict嵌套
数据类型的划分:可变数据类型和不可变数据类型. 不可变数据类型(可哈希):元祖.bool.int.str 可变数据类型(不可哈希):list.dict,set(集合) dict(字典): dict(字 ...
- 字典表+委托替代switch解决思路
参考:http://www.jianshu.com/p/8887b3b3e8ba 代码 namespace 解决Switch { class Program { delegate string fun ...
- SpringBoot整合freemarker中自定义标签获取字典表的数据
因为在前端要根据字典表中的数据去将1.2这些值转换成对应的文字解释 1.首先要创建一个类去实现 TemplateDirectiveModel 类 @Component public class Dic ...
- dict字典
dict字典 字典的概述 • 概述:使⽤键-值(key-value)⽅式存储. • key的特点: • 1.字典中的key必须是唯⼀的 • 2.key值必须是不可变的数据类型:字符串.元组.Numbe ...
- 探讨VMP 2.12.3 导入表修复
壳版本:VMProtect.Ultimate.2.12.3 样本:notepad.exe 目的:IAT修复 作者:MrWrong 标题:探讨VMP 2.12.3 导入表修复 只是感兴趣,没有其他目的. ...
随机推荐
- mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有 ...
- k8s 如何 Failover?- 每天5分钟玩转 Docker 容器技术(127)
上一节我们有 3 个 nginx 副本分别运行在 k8s-node1 和 k8s-node2 上.现在模拟 k8s-node2 故障,关闭该节点. 等待一段时间,Kubernetes 会检查到 k8s ...
- 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(3)-前端实现
转载自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可视化订单需求区域分析系统实现功能: 在现实生活中,计算机和互联网迅速发展,人们越来 ...
- 2017noip普及组赛前注意事项总结
petr 大神镇场 距人生第一场noip只差4天半了(好紧张) 总结几下四道题的做题策略 NO1 第一题一般是送分的,认真读题,别太草率,多想几遍再动手,把重要的地方圈一圈.画一画,自己找几个数据多试 ...
- linux 搭建PPTP
pptp简介 PPTP,Point to Point Tunneling Protocol,点对点隧道协议,这是一种支持多协议虚拟专用网络(VPN)技术.远程用户能够通过装有点对点协议的系统安全访问公 ...
- OSSEC初探
OSSEC初探 概念: OSSEC是一款开源的基于主机的入侵检测系统(HIDS),它可以执行日志分析.完整性检验.windows注册表监控.隐匿性检测和实时告警.它可以运行在各种不同的操作系统上,包括 ...
- java中线程的状态详解
一.线程的五种状态 线程的生命周期可以大致分为5种,但这种说法是比较旧的一种说法,有点过时了,或者更确切的来说,这是操作系统的说法,而不是java的说法.但对下面所说的六种状态的理解有所帮助,所以 ...
- JAVA多线程之先行发生原则
一.引子 如果java内存模型中所有的有序性都仅仅依靠volatile和synchronized来完成,那么有一些操作会变得很繁琐,但我们在编写java并发代码时并未感觉到这一点,这是因为java语言 ...
- 解决axios传递参数后台无法接收问题
1.根据下面几个方法改变前台传递参数方式 这样后台就可以直接根据传递的参数获取数据,如下图用户登录时直接传递用户名和密码 2.不改变前台传递样式修改后台接收方式
- 机器学习00:如何通过Python入门机器学习
我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...