
2.5.1 字典及其创建
字典(dict)由键和对应值成对组成,也被称作关联数组或散列表。字典类型是Python中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素,如图2-4所示。

图2-4 字典的映射关系
字典是一种通过名字引用值的数据结构,字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里,键可以是数字、字符串或者元组等。例如:

字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。字典类型很像学生时代常用的《新华字典》。我们知道,通过《新华字典》中的音节表,可以快速找到想要查找的汉字。其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值。总的来说,字典类型所具有的主要特征与解释如表2-2所示。
表2-2 字典类型的主要特征与解释

字典的创建有以下3种方式。
1.使用“{}”创建字典
由于字典中每个元素都包含两部分,分别是键(key)和值(value),因此在创建字典时,键和值之间使用冒号(:)分隔,相邻元素之间使用逗号(,)分隔,所有元素放在大括号{}中。
使用{}创建字典的语法格式如下:

其中dictname表示字典变量名,keyn:valuen表示各个元素的键值对。需要注意的是,同一字典中的各个键必须唯一,不能重复。
【例2-43】 用“{}”创建字典。

运算结果:

可以看到,字典的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行;字典的值可以是Python支持的任意数据类型。
2.通过fromkeys()方法创建字典
在Python中,还可以使用dict字典类型提供的fromkeys()方法创建带有默认值的字典,具体格式为:

其中,list参数表示字典中所有键的列表(list);value参数表示默认值,如果不写,则为空值None。
【例2-44】 用fromkeys()方法创建字典。

运算结果:

可以看到,city列表中的元素全部作为了renkou字典的键,而各个键对应的值都是2000。这种创建方式通常用于初始化字典,设置value的默认值。
3.通过dict()映射函数创建字典
通过dict()函数创建字典时,可以向dict()函数传入列表或元组,而它们中的元素又各自是包含两个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
【例2-45】 用4种方式创建同一个字典。

运算结果:
