
4.6 字典中的方法
Python中内置了很多对字典操作的方法,下面一起来看一下。
4.6.1 遍历字典

【例4-24】遍历字典。

通过上述代码,遍历了b字典的所有键,同时能根据键获取对应的值。
程序运行结果如图4-25所示。

图4-25 运行结果
【例4-25】迭代字典中的键是很常见的,可以省略for循环中的键方法调用迭代遍历字典隐式迭代其键。代码如下。

下面展示几个直接获取所有值或者键的方法。
【例4-26】将b字典的所有值得出转换为list打印。

【例4-27】将b字典的所有的键值对得出转换为list打印。

【例4-28】以键值对的方式获取b字典的键值对。

程序运行结果如图4-26所示。

图4-26 运行结果
4.6.2 别名与复制

与列表的情况一样,因为字典是可变的,我们需要知道别名。每当两个变量引用同一个对象时,对一个变量的更改会影响另一个。
【例4-29】如果想要修改字典并保留原始副本,请使用复制方法。例如,opposites是一个包含反义词的字典。

【例4-30】alias和opposites是指同一个对象;copy是指同一字典的新副本。如果修改alias,opposites也会改变。

程序运行结果如图4-27所示。

图4-27 运行结果
如果是复制,那么opposites是不会改变的。
4.6.3 统计频率

Python的字典的api能够帮助统计字符串中字母的频率,下面看一下它的使用方法。
【例4-31】统计频率1。

程序运行结果如图4-28所示。

图4-28 运行结果
我们从一个空字典开始。对于字符串中的每个字母,找到当前计数(可能为零)并递增它。最后,字典包含字母对和它们的频率。
按字母顺序显示频率表可能更有吸引力,可以使用items和sort方法来做到这一点。
【例4-32】统计频率2。

程序运行结果如图4-29所示。

图4-29 运行结果
4.6.4 字典排序

对字典进行排序?这其实是一个伪命题,首先搞清楚Python字典的定义,字典本身默认以Key的字符顺序输出显示,就像人们用的真实的字典一样,按照ABCD字母的顺序排列,并且本质上各自没有先后关系,是一个哈希表的结构。
但实际应用中确实有这种排序的“需求”,即按照Values的值“排序”输出,或者按照别的奇怪的顺序进行输出,只需要把字典转换成list或者tuple,把字典每一对键值转换为list中的子list或者子tuple再输出,就可以达到目的。
【例4-33】字典排序1。

程序运行结果如图4-30所示。

图4-30 运行结果
字典始终都按照Key从小到大排序,与定义过程无关,转换为list嵌套tuple这里也依然按照Key排序。
【例4-34】字典排序2。

程序运行结果如图4-31所示。

图4-31 运行结果
字典的顺序依旧不变,但转换为list嵌套tuple格式之后,完成了按照Value排序的操作。