3.9 字典

3.9.1 字典的概念

例3-14】根据同学的名字查找对应的成绩。

解析】采用列表实现,则需要names和scores两个列表,并且列表中元素的次序一一对应,如zhou对应95,Bob对应75等,如下所示。

通过名字查找对应成绩,先在names中遍历查找的名字,再从scores中遍历对应的成绩,查找时间会随着列表的长度的增加而增加。为了解决这个问题,Python提供了字典。

字典(Dict)在其他程序设计语言中称为映射(Map),通过键值对(Key-Value)存储数据,键和值之间用冒号间隔,元素项之间用逗号间隔,整体用一对大括号“{}”括起来。字典语法结构如下所示。

字典有如下特性。

● 字典的值可以是任意数据类型,包括字符串、整数、对象,甚至字典等。

● 键值对没有顺序。

● 键必须是唯一的,不允许同一个键重复出现,如果同一个键被赋值两次,后一个值会覆盖前面的值。举例如下。

● 键是不可变的,只能使用整数、字符串或元组充当,不能使用列表。

解析】因为dict根据Key来计算Value的存储位置,在Python中,字符串、整数等都是不可变的,而list是可变的,因此,list不能作为Key。

字典与列表相比,有以下几个特点。

● 字典用空间来换取时间,其查找和插入的速度极快。

● 字典需要占用大量的内存,内存浪费较多。

● 字典是无序的对象集合,字典中的元素是通过键来存取的,而不是通过偏移存取。

采用字典实现上面的例子,则只需创建“名字”-“成绩”的键值对,便可直接通过名字查找成绩。字典实现代码如下。

3.9.2 字典的操作

下面介绍字典元素的访问、删除、修改和增加等相关操作。

(1)字典元素的访问

1)keys()方法返回一个包含所有键的列表。

2)has_key()方法检查字典中是否存在某一键。

3)values()方法返回一个包含所有值的列表。

4)get()方法根据键返回值,如果不存在则返回None。

5)items()方法返回一个由(key,value)组成的元组。

6)in运算用于判断某键是否在字典中,对于value值不适用。

7)copy()方法复制字典。

(2)字典元素的删除

1)del()方法允许使用键从字典中删除元素。

2)clear()方法清除字典中的所有元素。

3)pop()方法删除一个关键字并返回它的值。

(3)字典元素的修改

update()方法类似于合并,它把一个字典的键和值合并到另一个字典以覆盖相同键的值。

(4)字典元素的增加

字典方法如表3.13所示。

表3.13 字典方法