Python自然语言处理(微课版)
上QQ阅读APP看书,第一时间看更新

3.9 字典

3.9.1 字典的概念

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

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

     names =['zhou', 'Bob', 'Tracy']
     scores =[95, 75, 85]

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

字典在其他程序设计语言中称为映射(map),通过键/值对(key/value)存储数据,键和值之间用冒号间隔,元素项之间用逗号间隔,整体用一对大括号括起来。字典语法结构如下。

     dict_name={key:value,key:value}

字典具有如下特性。

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

(2)键/值对用冒号分隔,而元素项之间用逗号分隔,所有这些都包括在大括号中。

(3)键/值没有顺序。

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

     >>>dict={'Name':'Zara', 'Age':7, 'Name': 'Zhou'}
     dict['Name']: Zhou

(5)键必须不可变,只能使用数字、字符串或元组充当,不能使用列表,如图3-11所示。

图3-11 键的取值

因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希(Hash)算法。为了保证Hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,而list是可变的,因此,list不能作为key。

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

(1)字典通过用空间来换取时间,其查找和插入的速度极快,不会随着“键”的增加而增加。

(2)字典需要占用大量的内存,内存浪费多。

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

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