从0.1开始学Python——[9]

  • 字典(dict)
    • 字典的操作
    • 修改字典
    • 字典项的删除

现在开始学习字典,字典也是写程序过程中非常重要的东西,但是字典不属于序列,**属于映射(mapping)**这种数据结构。

字典(dict)

它和列表都是存储对象的容器。列表有一个问题,就是元素贼多的时候,如果不知道索引对应的内容,查询起来很费劲,就像番外练习中移除英雄的设计部分那样,要么很麻烦得输入英雄信息,要么用索引搜,多了就得挨个找。字典就不一样,字典之所以叫字典,就是因为查询“元素”很方便,就像不同字典搜拼音开头字母再找音节之类的,程序中的字典的“元素”都有自己唯一的名字,以便于迅速查找,这个唯一名字称为键(key)。“元素”的值同样叫value,所以字典也叫键值对(key-value)结构,不过字典里面这些不叫元素(所以我加了双引号),每个键值对叫一个项(item)。字典用{}表示,由于键值对结构,所以写每个项的时候要写为key:value的形式,各项之间逗号隔开。

dict1 = {'铁血剑豪': 49, '源计划:林': 99, '冰雪节限定': '买不了'}
print(dict1, type(dict1))
{'铁血剑豪': 49, '源计划:林': 99, '冰雪节限定': '买不了'} <class 'dict'>

其中,键可以是任意不可变对象,而值可以是任意对象。注意,前面说到键是唯一的名字,所以每个项的键不能一样,一样的时候后面的会替换前面的,前面的也会被后面的替代。

dict1 = {'铁血剑豪': 49, '源计划:林': 99, '铁血剑豪': '买不了'}
print(dict1, type(dict1))
{'铁血剑豪': '买不了', '源计划:林': 99} <class 'dict'>

注意大括号中括号小括号等可以跨行写。字典通过键获取值,相当于列表用索引获取元素。

dict1 = {'铁血剑豪': 49,'源计划:林': 99,'冰雪节限定': '买不了'}
print(dict1['源计划:林'])
99

键不存在的时候就会报错。

字典的操作

除了上述的用{}创建字典之外,用dict()函数也可以创建字典。参数名就是键,参数值就是值,不过这样建立的字典,所有的键都是字符串

dict2 = dict(q='阿尔法突袭', w='冥想', e='忘了', r='高原血统')
print(dict2)
{'q': '阿尔法突袭', 'w': '冥想', 'e': '忘了', 'r': '高原血统'}

序列中只有两个值的序列叫双值序列(如(1,2),[1,2],'12’等);如果一个序列中某元素也是一个序列,这个元素就叫子序列。如果一个序列中的元素,都是双值子序列,那么这个序列可以直接转换为字典,同样用的是dict()函数,这个方法的键就不用一定是字符串了

dict3 = dict([('武器大师', '贾克斯'), ('武神', 99)])
print(dict3)
{'武器大师': '贾克斯', '武神': 99}

len()函数用来获取字典里面键值对个数。

print(len(dict3))
2

in,not in看字典里面是否包含或是否不包含指定的

print('武器大师' in dict3)
print('贾克斯' not in dict3)

'贾克斯’是值,不是键,因此:

True
True

用键获取值,上面也讲到了,但是要注意如上面演示的print(dict1[‘源计划:林’]),键是字符串,那[]里面一定要加’',是数字则不用,总而言之就是输入的键要和字典里面的键完全一致

dict3 = dict([('武器大师', '贾克斯'), (1, 99)])
print(dict3[1])
99

例如print(dict3[‘1’]),则会报错。但是如果把键赋值给某个变量,那么就不用管’'的事情了。

dict3 = dict([('武器大师', '贾克斯'), ('武神', 99)])
s = '武神'
print(dict3[s])
99

根据键获取值的方法还有.get(key[,default]),注意中括号里面的东西可选参数,自己使用的时候不一定需要输入这个,这个方法的好处在于没有你输入的键时不会报错,会输出None。

dict3 = dict([('武器大师', '贾克斯'), ('武神', 99)])
print(dict3.get('武神'))
print(dict3.get(1))
99
None

可选参数是一个默认值,如果输入一个默认值,那么在没有找到你输入的键的时候,就返回默认值,而不是None。

print(dict3.get(1,'我不到啊'))
我不到啊

修改字典

dict1[key]=value即可,注意修改的是

dict3['武神'] = 129
print(dict3)
{'武器大师': '贾克斯', '武神': 129}

如果中括号里面输入的键不存在,就会添加输入的新键值对。

dict3['复仇武神'] = 49
print(dict3)
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49}

.setdefault(key[,default])方法也是用来添加项的,输入的key已经存在字典中的话就返回key的值,不会有任何修改,也就是说就算输入了新的值,值也不变,除非key是新的。

dict3.setdefault('武神', 129)
print(dict3)  # 结果不会变成武神对应129
dict3.setdefault('SKT 贾克斯', 79)
print(dict3)
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49}
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49, 'SKT 贾克斯': 79}

所选字典.update([other])用于将其他字典的项加到所选字典里面。

dict3.update(dict1)
print(dict3)
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49, 'SKT 贾克斯': 79, '铁血剑豪': 49, '源计划:林': 99, '冰雪节限定': '买不了'}

注意,如果两个字典有相同键,那么其他字典的key将会替代所选字典的key。

.copy()用于对字典浅复制,也就是只复制值,这种操作返回的新字典会创造出一个新对象,而不像赋值操作那样id相同。

dict4 = dict3
dict5 = dict3.copy()
print(id(dict3))
print(id(dict4))
print(id(dict5))
2207672546552
2207672546552
2207670353496

因此,复制的字典被修改不会影响原字典。由于值可以是任意对象,所以值本身也可以是字典,在这种情况下,也就是值属于可变对象的时候,浅复制将不会复制这一部分,这就是浅复制“浅”的地方。

dict6 = {'铁血剑豪': {'源计划:林': 99},'冰雪节限定': '买不了'}
dict7 = dict6.copy()
print(dict6, dict7)
dict7['铁血剑豪']['源计划:林'] = 199
print(dict6, dict7)
{'铁血剑豪': {'源计划:林': 99}, '冰雪节限定': '买不了'} {'铁血剑豪': {'源计划:林': 99}, '冰雪节限定': '买不了'}
{'铁血剑豪': {'源计划:林': 199}, '冰雪节限定': '买不了'} {'铁血剑豪': {'源计划:林': 199}, '冰雪节限定': '买不了'}

可以看出,修改字典里面的字典使独立的两个字典dict6和dict7并没有展现出独立的效果,这就是浅复制不能复制可变对象的原因。

字典项的删除

del除了删元素变量之外,同样可以删除

del dict3['冰雪节限定']
print(dict3)
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49, 'SKT 贾克斯': 79, '铁血剑豪': 49, '源计划:林': 99}

.popitem()随机删除一个项,但是其实一般默认删最后一个。有返回值,返回被删的项,是以元组结构显示,分别是key和value,当然需要打印才能知道。注意这个方法删不了空字典,会报错。

r = dict3.popitem()
print(r)
print(dict3)
('源计划:林', 99)
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49, 'SKT 贾克斯': 79, '铁血剑豪': 49}

.pop(key[,default])根据key删项,但是只返回。key不存在就返回报错,除非也写一个备选参数。

t = dict3.pop('铁血剑豪')
print(t)
print(dict3)
49
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49, 'SKT 贾克斯': 79}
q = dict3.pop('天人合一', '没有啊')
print(q)
print(dict3)

不打印q也没事,反正不会报错了。

没有啊
{'武器大师': '贾克斯', '武神': 99, '复仇武神': 49, 'SKT 贾克斯': 79}

.clear()删除所有项,也就是清空字典。

dict3.clear()
print(dict3)
{}

从0.1开始学Python——[9]相关推荐

  1. 从0.1开始学Python——[17]

    从0.1开始学Python--[17] 类 isinstance()函数 类的本质 用类创建对象的流程 之前我们学习了对象(object),即内存中专门用来储存数据的一块区域.面向对象(OOP),意思 ...

  2. 从0.1开始学Python——[6](番外练习)

    从0.1开始学Python--[6](番外练习) 小练习,写了一个用于记录自己使用的常用英雄信息的小程序. print('-'*20, '欢迎来到英雄联盟', '-'*20)heros = ['\t离 ...

  3. 从0.1开始学Python——[29]

    从0.1开始学Python--[29] 文件 打开文件 读取文件 关闭文件 文件的简单读取 readline()方法 文件,不仅在Python里面的.py,电脑里面大大小小的内容基本上都属于文件. 但 ...

  4. 从0.1开始学Python——[6]

    从0.1开始学Python--[6] 修改列表 修改元素 用切片的方式修改 用方法修改列表 遍历列表 while循环遍历 for循环遍历 列表在编写程序以及差错中十分重要,因此开继续学习列表的其他操作 ...

  5. 0基础转行学Python有前途吗?培训靠谱吗

    Python语言的流行热度最近几年都是大家有目共睹的事情,根据相关数据显示,随着近些年的发展,Python已经成为了四大编程语言之一,从云端.客户端到物联网中,Python的发展是无处不在的,市场人才 ...

  6. 小白学python买什么书-0基础小白学python有没有什么书可以推荐的?

    你是0基础,这就限定了书只能是为初学者准备的.我亲弟弟学python买了本python进阶书,这书买了两年,没看过20页,因为读不下去,没基础. 所以 1. 一定要选入门书. 入门书也有很多.那么哪本 ...

  7. 0基础小白学python好学吗-如果是一个纯0编程基础的小白,如何学Python

    Python 可用的地方非常多.无论是从入门级选手(爬虫.前端.后端.自动化运维)到专业级数据挖掘.科学计算.图像处理.人工智能,Python 都可以胜任.或许是因为这种万能属性,周围好更多的小伙伴都 ...

  8. 0基础小白学python好学吗-零基础适合学Python吗?小白能否学会Python?

    原标题:零基础适合学Python吗?小白能否学会Python? 我没学过编程,能否学会Python? 肯定的回答您:完全能学会 其实,很多个程序员都是从不会到会,每种知识也是从基础到复杂,大家都是从零 ...

  9. 0编程基础学python之数据类型和数据操作

    0基础学习python之数据类型和数据操作 大家都知道,我们python的强大功能之一就是处理数据,所以我们今天就来探讨一下python中的一些数据类型和他们之间的操作吧. 先来回顾学过知识,上图: ...

最新文章

  1. AWS — AWS VPC 虚拟专用云
  2. 面向过程之骑士飞行棋
  3. Linux Crontab 设置的定时任务没有启动的排查
  4. Window下PHP 安装redis扩展
  5. 数据结构----单源最短路径Dijkstra
  6. Inversion of Control(控制反转)之 Dependency Injection(依赖注入)
  7. 图像处理之三---摄像头灰度值处理
  8. 7月目标 socket , 一致性哈希算法 ; mongodb分片; 分布式消息队列; 中间件的使用场景...
  9. heic文件怎么打开 怎么将安卓heic格式转化jpg
  10. mysql必知必会和sql必知必会
  11. Windows 8 相关资源 MSDN原版
  12. matlab时频工具箱简介,matlab时频分析工具箱下载_matlab时频分析工具箱官方下载-太平洋下载中心...
  13. pt和px区别 pt是逻辑像素,px是物理像素
  14. tk免费顶级域名注册及使用
  15. Java与Python学习通法(1)和(2)序言和编程语言发展史怎么学
  16. 机器学习之信用卡诈骗案例总结
  17. 你所不知道的良心网站第三弹
  18. 湘潭大学信息安全课作业答案7
  19. 手动刷入recovery的方法
  20. iphone隐藏底条_iphone隐藏底部小横条,无需越狱

热门文章

  1. 计算机专业 845,浙江工商大学2020年考研845计算机基础综合考试大纲
  2. html中td自动换行问题
  3. 如何使用Fluent NHibernate
  4. PowerShell脚本传参
  5. 白色情人节 | 软萌小姐姐等你过节
  6. 寡妇用途大亨投资者的2200万美元房地产像小猪扑满,诉讼索赔
  7. Phone12进入DFU模式
  8. 前端表白纪念日用js+html+css实现的页面代码复制粘贴就能用
  9. 【python脚本】word批注批量提取器V2实用版
  10. 仿牛客论坛项目部署总结