2.5 字典
字典(dict)在其他语言中称作哈希映射(hash map)或者相关数组(associative array)。
字典可以由一个或多个键值对构成。通常,键(key)和值(value)之间用冒号(:)分隔,若存在多个键值对,键值对之间以逗号进行分隔。就像我们平时可以通过拼音在汉语字典中快速查找到对应的汉字一样,可以通过字典的键快速查找到其对应的值。
2.5.1 创建字典
字典的创建非常简单。可以创建一个空的字典,即只有一对大括号({}),也可以创建一个包含一个或多个键值对的非空字典。
如图2-62所示,我们创建了一个空的字典empty,而后又创建了一个包含7个键值对的字典对象dict1。
图2-62 创建字典的示例代码
需要重点指出的是字典中的键值是不能重复的,但值可以重复,如dict1字典对象中1、5、6这3个键对应的就是同一个值“熊猫鼠”。
如果在定义字典的时候,不小心出现了重复的键,会出现后果呢?
从图2-63中,我们可以看到存在多个键为0的键值对,即“0:'熊猫鼠'”“0:'熊猫'”“0:'接吻鱼'”,从输出结果可以看到只保留了定义字典时最后一个键为0的键值对。
图2-63 创建包括重复键的字典的示例代码
从图2-64中,我们可以看到字典的值不仅可以为字符串,还可以是数字,甚至可以是一个元组、列表等。
图2-64 创建包括不同类型值的字典的示例代码
2.5.2 获取字典元素
我们可以通过使用“字典名称[键]”的形式来获得该字典中这个键对应的值信息,如图2-65所示。
图2-65 获取字典中指定键对应值的示例代码
在图2-65中,使用dict1[2]获取dict1字典对象中“2”这个键对应的值,其输出为888,使用dict1['f']获取dict1字典对象中“f”这个键对应的值,其输出为[23, 'a', 'bc']列表。也可以使用字典的get()方法来达到同样的目的,如图2-66所示。
图2-66 使用字典的get()方法获取指定键对应的值
通过使用字典的items()方法,可以获得字典的所有键值对信息,如图2-67所示。
图2-67 使用字典的items()方法获取键值对
在图2-67中,可以看到字典的items()方法返回的内容以小括号进行分组,键和值间以逗号进行分隔,即返回的是一个元组列表(列表中的元素为元组)。
如图2-68所示,可以使用keys()方法返回字典对象的所有键。
图2-68 使用字典keys()方法获取字典对象的所有键
如图2-69所示,可以使用values()方法返回字典对象的所有值。
图2-69 使用字典values()方法获取字典对象的所有值
2.5.3 修改字典
创建字典以后,如果要修改字典的值,可以应用update()方法,或者直接找到对应键再赋值。
如图2-70所示,可以通过对字典中对应元素的键赋值来修改其值,以修改“3:'熊猫鼠'”为例,该元素的键为“3”,值为'熊猫鼠',通过dict1[3]='斑马鱼',就可以将“3”这个键的值修改为'斑马鱼'。也可以应用字典的update()方法来完成。这里我们继续将“3”这个键的值变更为'海马',同时又添加了一个键值对,即“8:'蜗牛'”。经过上述变更后,dict1字典对象的内容为{3: '海马', 4: '地图鱼', 5: '熊猫鼠', 2: 888, 0: [32, 345, 87], 'f': [23, 'a', 'bc'], 8: '蜗牛'}”。
图2-70 修改字典
2.5.4 字典元素计数
字典对象提供的所有方法如图2-71所示。字典对象没有提供对其元素进行计数的方法,那么有没有其他对字典元素进行计数的方法呢?
图2-71 字典对象提供的所有方法
我们可以使用len()函数来实现对字典元素的计数。
如图2-72所示,我们定义了一个字典对象,其包含了5个键值对元素,即“3: '熊猫鼠',4: '地图鱼',5: '熊猫鼠',2: 888,0: [32, 345, 87]”。先通过print()方法输出dict1对象,后使用len(dict1)函数获取dict1对象的长度,也就是它共包含了多少个键值对,其输出值为5。
图2-72 字典元素计数方法
2.5.5 删除字典或其元素
可以使用字典对象的pop()、popitem()或者clear()方法来删除字典的键值对元素或者删除整个字典。
在使用pop()方法时,需要指定字典的键,其输出为该键的值,pop()方法执行后,该键值对将从字典中消失。
如图2-73所示,在应用字典的pop()方法时,我们指定“3”这个键,应用print()方法输出其返回的值。从输出结果来看,返回值是“熊猫鼠”。而后输出字典dict1,发现键值对“3:'熊猫鼠'”已从dict1字典中消失。
图2-73 pop()方法应用示例
可以使用字典的popitem()方法,删除字典对象的最后一个键值对元素。
如图2-74所示,每使用一次popitem()方法,就从字典中弹出最后一个键值对元素。popitem()方法执行后,该键值对从字典中消失。
有没有一种方法可以快速清空字典的所有键值对元素呢?应用字典的clear()方法,就可以清空字典的所有键值对元素。
图2-74 popitem()方法应用示例
如图2-75所示,当使用字典的clear()方法后,字典的所有键值对元素都被删除,输出的字典对象dict1的内容为空。
图2-75 clear()方法应用示例
|