![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=1738828639-cqc3FSB9PJnaV0VAGX3gzn0kEvlmSrDP-0-dc9807eb685bdf2a4d236993ea5d1667)
【例4-24】遍历字典。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P71_78772.jpg?sign=1738828639-obNULqbUQURkrY2SniubEL1PQ1ieZLJl-0-fda6bdd401983631e205ac9fbf9727b8)
通过上述代码,遍历了b字典的所有键,同时能根据键获取对应的值。
程序运行结果如图4-25所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P71_39073.jpg?sign=1738828639-OXeLz6J7VxiZDovQ0NoElUeCYFMQJoLL-0-7e417d4cbff8746e6781b0df18eb37b5)
图4-25 运行结果
【例4-25】迭代字典中的键是很常见的,可以省略for循环中的键方法调用迭代遍历字典隐式迭代其键。代码如下。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78773.jpg?sign=1738828639-doji8y0feXJgMYQtb7MPm6u0C6hBufBM-0-a3c3e8ad96c7e5ca5e022e9c3e36d15f)
下面展示几个直接获取所有值或者键的方法。
【例4-26】将b字典的所有值得出转换为list打印。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78774.jpg?sign=1738828639-h62D0WhLyWuHBoY9WeP6h0moY16mDldO-0-41ab727f04aab510c7787455c105bb1a)
【例4-27】将b字典的所有的键值对得出转换为list打印。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78775.jpg?sign=1738828639-gZyqeEg50EpwNdrsO2sUk82UzHwwF1Lv-0-57cce7ddb6970fa5bc6a27ad62a20ed4)
【例4-28】以键值对的方式获取b字典的键值对。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78776.jpg?sign=1738828639-CMwUAvjBBwqTbZK1X9U8WMes4FFSSFdo-0-d027e21bcac6ea1855f21525727020a3)
程序运行结果如图4-26所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39147.jpg?sign=1738828639-Fi5JvwgyacO3kYEKnCYAO33OzxV6RE0F-0-aa3373d88a83a0df4eece2fec1714318)
图4-26 运行结果
4.6.2 别名与复制
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39206.jpg?sign=1738828639-44ordxVcUrQGHFsjAqTDjqPTAjh31fjk-0-299dfac5215d66eefd1237836885ed54)
与列表的情况一样,因为字典是可变的,我们需要知道别名。每当两个变量引用同一个对象时,对一个变量的更改会影响另一个。
【例4-29】如果想要修改字典并保留原始副本,请使用复制方法。例如,opposites是一个包含反义词的字典。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78777.jpg?sign=1738828639-G73LG9TbjilTFGSLBxeWenmRULVJqCwq-0-f8e4179181ed5dd39787e80932ee0dcb)
【例4-30】alias和opposites是指同一个对象;copy是指同一字典的新副本。如果修改alias,opposites也会改变。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_78778.jpg?sign=1738828639-NdjJ5ryytduNs7EU3VmCaT07sS72sPf8-0-f7a6d74b53dfd98b3d1c699a1ae75e55)
程序运行结果如图4-27所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39185.jpg?sign=1738828639-i1ZaGmcytPQo6gcfAKPKYzAUTvyQJhLZ-0-0e7930ade8a44944f39e5fa34cce274d)
图4-27 运行结果
如果是复制,那么opposites是不会改变的。
4.6.3 统计频率
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P72_39212.jpg?sign=1738828639-TeQ0yd2h0HjbHNM9s6THBNDbFMmof5HV-0-8d5d4ea33d2d3a048c84b22112918972)
Python的字典的api能够帮助统计字符串中字母的频率,下面看一下它的使用方法。
【例4-31】统计频率1。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_78780.jpg?sign=1738828639-bjbxnv8GhG7PsUzg2dUiLPD37d85jqEt-0-aecf71f012947f677e1a3f4668e31be2)
程序运行结果如图4-28所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39247.jpg?sign=1738828639-UpJL5D8U349zgsa9J1aeS6TuyqjD3fqG-0-417b18358e53826a4c9943673c5dd530)
图4-28 运行结果
我们从一个空字典开始。对于字符串中的每个字母,找到当前计数(可能为零)并递增它。最后,字典包含字母对和它们的频率。
按字母顺序显示频率表可能更有吸引力,可以使用items和sort方法来做到这一点。
【例4-32】统计频率2。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_78781.jpg?sign=1738828639-9Wu53igLt2pWXO4W17Po1BshotVBOdRs-0-89a52bba83bb57685b2d12e9eca8b4f0)
程序运行结果如图4-29所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39269.jpg?sign=1738828639-FbLrmxaoVWXFyFnZcwcuVXutOXEu4qjq-0-234066d735679d309b5462b96bf919fc)
图4-29 运行结果
4.6.4 字典排序
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39324.jpg?sign=1738828639-YaFX8lLGZOfcTQ1iG05PVlPsE0CYFsHO-0-efdffa5011613dd9ccc72cd1bed95cc1)
对字典进行排序?这其实是一个伪命题,首先搞清楚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=1738828639-LSDT5oip8dKGBtswShPHJQuDC9CkI04P-0-6409a7369b85e33bf297bc814c2da775)
程序运行结果如图4-30所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P73_39317.jpg?sign=1738828639-nHJ0BngNvDxCt8lMn9bT7kZrLqlJqExg-0-4b29b40866801d391f608f64083df24d)
图4-30 运行结果
字典始终都按照Key从小到大排序,与定义过程无关,转换为list嵌套tuple这里也依然按照Key排序。
【例4-34】字典排序2。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P74_78782.jpg?sign=1738828639-YYwDljhkJNg0o4t6sWjNxZ52cDVL0Ks5-0-56a3eedbd4c32684afe64283aa595507)
程序运行结果如图4-31所示。
![](https://epubservercos.yuewen.com/CDC5B1/15825991504141406/epubprivate/OEBPS/Images/Figure-P74_39375.jpg?sign=1738828639-ohrP5UDbjYGCk605XxDYqhDmXqD3yMr4-0-9b66ca321d71fc74b5b8173132fa1467)
图4-31 运行结果
字典的顺序依旧不变,但转换为list嵌套tuple格式之后,完成了按照Value排序的操作。