现有一个水果篮,里面放了 3 个苹果、10 个橙子、8 个香蕉。大家想一想,如果要用 Python 来记录水果篮里面每种水果的数量,该怎么做呢?
通过 Python列表对象入门 一节,我们知道列表可以用来存储多个数据。因此,我们可以用两个列表 fruits 和 numbers ,来分别记录水果的种类和数量:
|
|
可以看到,两个列表每个槽位存放的数据都是相对应的。例如, fruits[0] 存储的是苹果的英文名 apple ;相应地,numbers[0] 记录了苹果的数量 3 。
根据约定的存储规律,我们可以这样找出 apple 的个数:
|
|
先找出 apple 在 fruits 列表中的下标,然后根据下标取出保存在 numbers 列表的数量。这样不仅操作繁琐,而且当待查找的列表越长,耗时也越长。
通过指定值找到与之关联的另一个值,是一种很常见的场景。那么,是否有更能胜任这种场景的数据类型呢?接下来,我们一起来探索本节的主角 —— 字典 对象( dict )。
概述
字典 ( dict ),是一种可变容器对象,用于高效存储 键值对 。键值对 是一种由 键 ( key ) 和 值 ( value ) 组成的关联结构,表示键和值之间存在某种关系。
字典保存键值对,键值对之间以 逗号 分隔,被花括号 {}
包括在内。举个例子,我们可以创建一个 dict 对象,来存储每种水果对应的数量:
|
|
注意到,该字典以水果种类为键( key ),以对应的数量为值 ( value )。 以 'apple': 3
为例,'apple'
为键,3
为值,键和值之间用冒号 :
分隔,表示 apple 的数量是 3 。
前面提到的花括号和冒号必须是英文符号,否则程序会报错。
编程语言一般使用英文符号。后续如无特别说明,符号均指英文符号。
遍历
字典是一个可迭代对象,因此,我们可以使用 for 语句对它进行遍历:
|
|
这个 for 语句依次取出字典中每个键值对的 key ,并执行循环体,将它输出到屏幕。
字典还提供了内置方法 keys() ,来获取字典中所有的键:
|
|
可以看到,keys() 方法以字典视图的形式返回了字典中所有的键。
同样,我们用 for 语句来遍历这个字典视图,并将 key 依次输出到屏幕:
|
|
那么,如果要输出所有的键值对呢?我们可以先调用 items() 方法,得到一个包含所有键值对的字典视图:
|
|
再对该视图进行遍历,依次打印水果种类和数量:
|
|
同理,values() 方法返回了一个包含字典中所有值的视图:
|
|
查找
与列表不同,字典以键( key )作为索引,查找速度极快。例如,我们可以这样来查找 apple 的数量:
|
|
如果待查找的 key 在字典中不存在,Python 就会报错:
|
|
如果不确定 key 是否在字典里,可以这样来判断:
|
|
由于 pear 不在字典里面,因此返回 False ;而 apple 存在于字典中,返回 True 。
修改
果篮中的苹果被吃掉一个,此时数量就变成 2 。那么,如何对字典进行修改呢?
我们可以使用 赋值 语句,为指定 key 设置新 value 。例如,将 apple 的数量改为 2 :
|
|
不仅如此,我们还可以先取出水果的数量,对其做减法操作,最后再将结果赋值。假设橙子也被吃掉了一个,我们可以这样更新橙子的数量:
|
|
例子中,赋值符 =
右边先取出橙子的数量,并进行计算。
通过 -=
赋值运算符,上述语句还可进一步简化。 假设香蕉也被吃掉了一个:
|
|
字典是一个可变容器对象,因此它可以随时随地添加数据。假如,果篮又放入 4 个梨:
|
|
删除
‘如果想删除字典中的某个键值对,有两种不同的方式可以实现:
- pop 方法
- del 语句
例如,我们调用 pop 方法,删除键为 apple 的键值对:
|
|
注意到,pop 方法删除指定键值对,并将值返回。
此外,我们还可以用另一种方式来删除键值对 —— del 语句:
|
|
这两种方法的区别在于,pop 方法会返回被删除的值,而 del 语句不能。
清空
如果想清空整个字典,则可以调用 clear 方法:
|
|
特性
字典是用于存储键值对的容器对象,必须满足以下约束:
- 同一个 key 只能出现一次;
- key 必须是 不可变对象 ;
- value 可以是任意数据类型;
【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: