![Python从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/265/27563265/b_27563265.jpg)
4.6 字典中的方法
Python中内置了很多对字典操作的方法,下面一起来看一下。
4.6.1 遍历字典
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P71_39086.jpg?sign=1738868652-lr1xLTDAEpzfEYJyai5BR8nk0JXtk3kO-0-245b267f19d6cb32b6f755073c083c38)
【例4-24】遍历字典。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P71_78772.jpg?sign=1738868652-Mz5zZjB7PSe1HIq7DpJ2gQ6YQiMnNjUw-0-53fdd6cb4e4be47e2dffb32166bc7c18)
通过上述代码,遍历了b字典的所有键,同时能根据键获取对应的值。
程序运行结果如图4-25所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P71_39073.jpg?sign=1738868652-KBH6m4PIcGbTthH7qRKRvKAmg1ghbcBI-0-0b9ed2bf6d58c2f983a6affce9884842)
图4-25 运行结果
【例4-25】迭代字典中的键是很常见的,可以省略for循环中的键方法调用迭代遍历字典隐式迭代其键。代码如下。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78773.jpg?sign=1738868652-1NfSkY0OdFEzeB0TVvAlr1Q319Wpqszc-0-03d4ff497c2bb0764217202960e47462)
下面展示几个直接获取所有值或者键的方法。
【例4-26】将b字典的所有值得出转换为list打印。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78774.jpg?sign=1738868652-eyOM70MpoK5F5taQYvg0VIpzVPECcc0x-0-75520fa5dfc798d7f1ab81ab2ad600d9)
【例4-27】将b字典的所有的键值对得出转换为list打印。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78775.jpg?sign=1738868652-znenKDL93PgDWNvL14knGPGvC1o28MG9-0-57338c14577ba74583e34146f11b451d)
【例4-28】以键值对的方式获取b字典的键值对。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78776.jpg?sign=1738868652-uPtNFykTcZeVADVwjyG4c7CzLG9n3okN-0-1d91eafafabb79d804a926ed06be578d)
程序运行结果如图4-26所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39147.jpg?sign=1738868652-yFTlTNwTvTytHvDZlSuQwrwwy6LnrvIX-0-839861157d7882788932c441f24cd2e4)
图4-26 运行结果
4.6.2 别名与复制
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39206.jpg?sign=1738868652-aXqmWmQfdz7hQxMS02fKsDvNS7MQT5ct-0-a8c0e4348f48e84aa9df755a1e91690d)
与列表的情况一样,因为字典是可变的,我们需要知道别名。每当两个变量引用同一个对象时,对一个变量的更改会影响另一个。
【例4-29】如果想要修改字典并保留原始副本,请使用复制方法。例如,opposites是一个包含反义词的字典。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78777.jpg?sign=1738868652-FE1dHfLWO5Lyx8BbEtILvuFujIW4veqm-0-07bfabd737d4c06a6eb716b7b4259b0e)
【例4-30】alias和opposites是指同一个对象;copy是指同一字典的新副本。如果修改alias,opposites也会改变。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78778.jpg?sign=1738868652-ksUL1J0ShRDl5tpAKg7dCOGtBPyQsnrq-0-6b3672e4299d83f2b39be2cc513481b7)
程序运行结果如图4-27所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39185.jpg?sign=1738868652-rE2vlqWmAWsu6JvvpISZJmxxnk4pl6Gy-0-dc854beb0e452028ac4c4887c33e535e)
图4-27 运行结果
如果是复制,那么opposites是不会改变的。
4.6.3 统计频率
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39212.jpg?sign=1738868652-i7BHyQ4HoTEltj4cBuOULayAjapwdJbD-0-f2282c552cbbc991d3cbe220b617f5fa)
Python的字典的api能够帮助统计字符串中字母的频率,下面看一下它的使用方法。
【例4-31】统计频率1。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_78780.jpg?sign=1738868652-EGMjXo6H4ysJqrt3q11elKiBSsNIEJGM-0-0bdd89e398c412d5963dd1467a8b9296)
程序运行结果如图4-28所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39247.jpg?sign=1738868652-tYL40H4141kpMeHCE8pEPE6KDqOw8GFj-0-b089c22dda67218bed741f825ab11eb1)
图4-28 运行结果
我们从一个空字典开始。对于字符串中的每个字母,找到当前计数(可能为零)并递增它。最后,字典包含字母对和它们的频率。
按字母顺序显示频率表可能更有吸引力,可以使用items和sort方法来做到这一点。
【例4-32】统计频率2。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_78781.jpg?sign=1738868652-iDPsBXGoLDpCyMLqE1mDprmqRbY2r5Ef-0-98afafae14ed332f4ccf34a41befec80)
程序运行结果如图4-29所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39269.jpg?sign=1738868652-Vz4tG3U9PzOMAATnJwolYeAmAl9VjU7A-0-5b5d420c2c6890d106a51ff3e4db3ce7)
图4-29 运行结果
4.6.4 字典排序
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39324.jpg?sign=1738868652-qKJP9djLsIkVNJGQfEUlIhRAJk6byDoq-0-69b5f7e221f0a2018fb3e0a70824e476)
对字典进行排序?这其实是一个伪命题,首先搞清楚Python字典的定义,字典本身默认以Key的字符顺序输出显示,就像人们用的真实的字典一样,按照ABCD字母的顺序排列,并且本质上各自没有先后关系,是一个哈希表的结构。
但实际应用中确实有这种排序的“需求”,即按照Values的值“排序”输出,或者按照别的奇怪的顺序进行输出,只需要把字典转换成list或者tuple,把字典每一对键值转换为list中的子list或者子tuple再输出,就可以达到目的。
【例4-33】字典排序1。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_81346.jpg?sign=1738868652-8QhAlfP8YhCzsBEoZ8BVxF2xUKYThGxY-0-b5801dae7b00e26f09fb5050933d223b)
程序运行结果如图4-30所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39317.jpg?sign=1738868652-CE7ZKAoTscd8mTUkN1UWcuuRLWsvzOHt-0-18dfa8050aef78b9111635a8b6a00edb)
图4-30 运行结果
字典始终都按照Key从小到大排序,与定义过程无关,转换为list嵌套tuple这里也依然按照Key排序。
【例4-34】字典排序2。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P74_78782.jpg?sign=1738868652-sTiB4tqfJbnWwCWvE83BHR4v9QkcpZ1g-0-0566c30a9c7783ef52622f92c0d9d265)
程序运行结果如图4-31所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P74_39375.jpg?sign=1738868652-WxVMWv9rjScgAwPAQu047Qu36AFufEGZ-0-7a52c2fe6ee78f667dcd7bba6e96b5ac)
图4-31 运行结果
字典的顺序依旧不变,但转换为list嵌套tuple格式之后,完成了按照Value排序的操作。