【廖雪峰python入门笔记】dict
1. dict
我们已经知道,list
和tuple
可以用来表示顺序集合,例如,班里同学的名字:
['Adam', 'Lisa', 'Bart']
或者考试的成绩列表:
[95, 85, 59]
但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。
如果把名字和分数关联起来,组成类似的查找表:
'Adam' ==> 95
'Lisa' ==> 85
'Bart' ==> 59
给定一个名字,就可以直接查到分数。
Python的 dict
就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:
d = {'Adam': 95,'Lisa': 85,'Bart': 59
}
我们把名字称为key
,对应的成绩称为value
,dict
就是通过 key 来查找 value。
花括号{}
表示这是一个dict,然后按照 key: value
, 写出来即可。最后一个 key: value 的逗号可以省略。
由于dict也是集合,len()
函数可以计算任意集合的大小:
>>>len(d)
3
注意:
一个 key-value 算一个,因此,dict大小为3。
2. 访问dic
我们已经能创建一个dict,用于表示名字和成绩的对应关系:
d = {'Adam': 95,'Lisa': 85,'Bart': 59
}
那么,如何根据名字来查找对应的成绩呢?
可以简单地使用 d[key]
的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:
>>> print d['Adam']
95
>>> print d['Paul']
KeyError: 'Paul'
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError
发生,有两个办法:
一是先判断一下 key
是否存在,用 in 操作符:
if 'Paul' in d:print d['Paul']
如果 ‘Paul’ 不存在,if语句判断为False,自然不会执行 print d[‘Paul’] ,从而避免了错误。
二是使用dict本身提供的一个get 方法
,在Key不存在的时候,返回None:
>>> print d.get('Bart')
59
>>> print d.get('Paul')
None
3. dict的特点
dict
的第一个特点
是查找速度快
,无论dict有10个元素还是10万个元素,查找速度都一样。而list
的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点
是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能
重复。
dict的第二个特点
就是存储的key-value序对是没有顺序
的!这和list不一样:
d = {'Adam': 95,'Lisa': 85,'Bart': 59
}
当我们试图打印这个dict时:
>>> print d
{'Lisa': 85, 'Adam': 95, 'Bart': 59}
打印的顺序不一定是我们创建时的顺序,而且,不同的机器打印的顺序都可能不同,这说明dict内部是无序
的,不能
用dict存储有序的集合。
dict的第三个特点
是作为key 的元素必须不可变
,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key
。
可以试试用list作为key时会报什么样的错误。
不可变
这个限制仅作用于key,value是否可变无所谓:
{'123': [1, 2, 3], # key 是 str,value是list123: '123', # key 是 int,value 是 str('a', 'b'): True # key 是 tuple,并且tuple的每个元素都是不可变对象,value是 boolean
}
最常用的key还是字符串
,因为用起来最方便
3. 更新dict
dict是可变
的,也就是说,我们可以随时往dict中添加新的 key-value。比如已有dict:
d = {'Adam': 95,'Lisa': 85,'Bart': 59
}
要把新同学’Paul’的成绩 72 加进去,用赋值语句
:
d['Paul'] = 72
再看看dict的内容:
>>> print d
{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}
如果 key 已经存在
,则赋值会用新的 value 替换掉原来的 value:
>>> d['Bart'] = 60
>>> print d
{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}
3. 遍历dict
由于dict也是一个集合
,所以,遍历dict和遍历list类似,都可以通过for 循
环实现。
直接使用for循环可以遍历 dict 的 key:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> for key in d:print key
Lisa
Adam
Bart
由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值d[key]
。
【廖雪峰python入门笔记】dict相关推荐
- 【廖雪峰python入门笔记】列表生成式
1. 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, ...
- 【廖雪峰python入门笔记】迭代
1. 迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for ...
- 【廖雪峰python入门笔记】切片
1. 对list进行切片 对list进行切片 取一个list的部分元素是非常常见的操作.比如,一个list如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素 ...
- 【廖雪峰python入门笔记】函数
1. 函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...
- 【廖雪峰python入门笔记】set
1. set dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的. 有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是 ...
- 【廖雪峰python入门笔记】for循环
list或tuple可以表示一个有序集合.如果我们想依次访问一个list中的每一个元素呢?比如 list: L = ['Adam', 'Lisa', 'Bart'] print(L[0]) print ...
- 【廖雪峰python入门笔记】if语句
1. if语句及缩进规则 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if ...
- 【廖雪峰python入门笔记】tuple_创建单元素
tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: t = ( ...
- 【廖雪峰python入门笔记】list_按照索引访问
1. 按照索引访问list Python按照索引访问list 由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学: L = ['Adam', 'Lisa', ' ...
最新文章
- 波士顿咨询:2018最具创新力企业50强
- 日子是过以后、不是过从前
- 【自动化__持续集成】___java___static
- MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决
- unity3d Android多渠道,Unity For Android多渠道SDK接入解决方案
- 选择要加载的插件有什么用_为什么/如何PPT形状圆角化,用好这个插件,画出更多神奇形状...
- 伽利略板子串口驱动安装问题
- printf 小代码 大问题
- 图片版坦克大战源代码之图片处理类(一)
- 骁龙845_性能强大价格更吸引 超值骁龙845手机盘点
- Ps调色磨皮降噪抠图胶片特效模拟常用100款滤镜合集一键安装支持PSCC2015-2019win64
- python: not found 问题的解决
- 软回车和硬回车 MS高级office
- Altium_Designer-原理图库如何添加低电平有效的管脚?
- 取消Word自动首字母大写步骤
- linux系统获取root权限,linux怎么进入root权限
- Linux下常用文件系统
- 语音合成学习(一)综述
- Webtoos 仿Q+云桌面框架
- Linux--firewalld防火墙基础(firewalld和iptables的关系,四表五链,netfilter与iptables的关系,iptables语法与参数,firewalld网络区域)
热门文章
- 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交
- 技术图文:Matlab向量 VS. Python列表
- 【怎样写代码】偷窥高手 -- 反射技术(五):深入窥视方法
- 【建模必备】遗传算法的基本原理与步骤(编码/解码)
- 英特尔发布智慧社区解决方案,全栈技术支撑,涵盖五大战略方向
- 10个 Python 工程师,9个不合格!
- 华为昇腾师资培训沙龙·南京场 |华为昇腾 ACL 语言开发实践全程干货来了!看完就实操系列...
- 限免!百名AI大咖,20大技术和行业论坛,不可错过的开发者嘉年华
- 在Rust代码中编写Python是种怎样的体验?
- 美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?