
1.7 字典
我们从小学习语文,都用过字典。在查字典时可以从第1页开始,一页一页地往下找,直到找到为止。这样做明显效率低下,特别是当字的位置比较靠后时。所以在查字典时不应这样做,而是根据目录直接跳到对应的页码,查找关于字的解释。在字典中要查的每个字都是唯一的,每个字都有对应的解释说明。
Python中有字典数据类型。字典中的每个元素都由一个键值对组成,其中键相当于真实字典中的字,它在整个字典中作为字条是唯一的;值相当于字的解释说明。键与值之间用冒号分隔,键值对之间用逗号分隔。整个字典用{}(花括号)包围。
1.7.1 字典的创建
使用“{}”可以直接创建字典。在{}内添加各键值对,键值对之间用逗号分隔,键与值之间用冒号分隔。注意,在整个字典中,键必须是唯一的。
下面使用“{}”创建字典。

使用dict函数创建字典。该函数的参数可以以key=value的形式连续传入键和值,也可以将其他可迭代对象转换为字典,或者使用zip函数生成zip对象,然后将zip对象转换为字典。
下面以key=value的形式输入键和值,并生成字典。

下面使用dict函数将其他可迭代对象转换为字典,其他可迭代对象包括列表、元组、集合等。

这几种转换得到的结果均为:

使用zip函数可以利用两个给定的列表得到zip对象,然后使用dict函数将该zip对象转换为字典。这适合于分别得到键和值序列,然后组装成字典的情况。

使用fromkeys方法可以创建值为空的字典。例如:

1.7.2 索引
在创建字典以后,在字典名称后面跟[](方括号),在方括号内输入键的名称,可以获取该键对应的值。下面创建一个字典,通过索引获取名称为name的键对应的值。

使用字典对象的get方法也可以获得相同的结果。

使用字典对象的keys方法获取所有键,使用values方法获取所有值。

使用字典对象的items方法获取所有键值对。

使用in或not in运算符判断字典中是否包含或不包含指定的键,如果是则返回True,否则返回False。

字典的长度即字典中键值对的个数。使用len函数获取指定字典的长度。

1.7.3 字典元素的增删改
在创建字典以后,可以通过索引的方式直接添加键值对或修改指定键对应的值。下面创建一个字典dt记录学生信息。

添加表示学生分数的键值对:

修改学生姓名:

也可以使用字典对象的update方法添加或修改键值对。

使用del命令删除字典中的键值对。

将指定的键作为函数参数,使用字典对象的pop方法删除指定键值对。该方法返回指定键对应的值。

使用字典对象的clear方法清空字典中的所有键值对。

1.7.4 字典数据的格式化输出
当使用print函数输出字典数据时,可以使用format函数指定输出格式。下面创建一个字典。

用“{}”占位,在括号内可以从0开始添加数字,也可以不添加数字。字典数据作为format函数的参数给出。

用“{}”占位,在括号内指定参数名称,format函数的参数使用对应的参数名称并指定字典数据。

用“{}”占位,在括号内输入键的名称,format函数的参数被指定为字典名称。注意,在字典名称前面添加两个“*”。

用“{}”占位,在括号内添加字典的索引形式,但是字典名称用0代替。format函数的参数被指定为字典名称。
