
6.2 访问字典
访问字典包括访问字典的值、新增/修改字典的值、删除字典键值、删除整个字典等,下面分别进行介绍。
6.2.1 访问字典的值
访问字典的值很简单,主要的格式是“dict_name[key]”,下面进行演示,代码如下:

加粗的代码就是访问字典的值,其中"x"和"y"是字典的键。但是给出的键可能是不存在的,如果运行就会发生异常,如下所示:

运行上述代码得到的输出结果如下:

因此,使用字典一定要确定字典中存在对应的键才能这样访问。如果不能确定是否一定存在对应键,那么应该考虑使用if语句判断在字典中该键是否存在,下面通过代码清单6-2进行演示。
代码清单6-2:判断字典中是否存在某个键


这里值得注意的是in关键字,它会帮助我们判断该字典中是否存在对应的键。
如果获取一次值就要编写if语句,就会比较麻烦。为了更简单地处理访问的问题,可以使用字典提供的get函数来访问字典的值。
代码清单6-3:使用字典提供的get函数访问字典的值

get函数包含两个参数:一个是字典的键;另一个是默认值,在默认情况下是None。根据get函数的特性,在代码①处,在字典不存在键"z"的情况下会返回None;而在代码②处指定了在不存在键"z"的情况下默认返回值为"N/A",因此此处返回的是"N/A"。运行上述代码得到的输出结果如下:

注意 如何选择访问字典值的方式
上面介绍了3种访问字典值的方式,通过if语句判断会增加代码冗余度,因此不应该考虑使用这种方式,这样就只能通过“dict_name[key]”和get函数访问字典值。
如果能够确保键在字典中一定存在,则选择“dict_name[key]”方式,否则使用get函数。因为从可读性的角度来说,“dict_name[key]”方式更加直观,能让开发者更直观地知道访问的是一个字典,但是这种方式的缺点是会因为不存在键而产生运行错误。使用get函数的可读性虽然不高,但是能避免不存在键的运行错误。
下面通过代码说明:

6.2.2 新增/修改字典的值
通过键可以轻松地新增或修改字典的值,如代码清单6-4所示。
代码清单6-4:新增和修改字典的值

在字典中,值是通过键来索引的,因此只要像代码①处和代码②处那样为字典赋值即可。在赋值时字典会自动判断该键在字典中是否存在,如果在字典存在,则修改原来的值,如果在字典中不存在,则新增键值。
有时需要通过if语句判断字典中是否存在对应的键,然后进行操作,如果不存在对应的键就什么也不做,如下所示:

这里的两条if语句就是为了判断字典中是否存在对应的键,如果不存在则什么都不做,如果存在才会赋值,这样就能够达到我们的要求。
6.2.3 删除
删除分为删除字典键值和删除字典本身。删除字典键值又可以分为删除键值、弹出键值和清空字典,而删除字典本身就是使用关键字del从内存变量表中删除字典的引用,使字典变量在后续代码中不能再使用。下面通过代码清单6-5来说明。
代码清单6-5:字典的删除


代码①处是删除字典中的某个键;代码②处是弹出字典中的某个键,并返回其值;代码③处是随机弹出字典中的某个键值对;代码④处是清空字典;代码⑤处是删除变量my_dict。