- Python王者归来
- 洪锦魁
- 840字
- 2020-08-28 21:54:53
9-2 遍历字典
大型程序设计中,字典用久了会产生相当数量的元素,也许是几千个或几十万个或更多。本节将说明如何遍历字典的键-值对、键或值。
9-2-1 遍历字典的键-值
Python有提供方法items( ),可以让我们取得字典键-值配对的元素,若是以ch9_16.py的players字典为实例,可以使用for循环加上items( )方法,如下所示:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P118_58853.jpg?sign=1739605743-oVicAINvDVsePkCp5AGP9PV3D7WN4Kc6-0-e74f29f89dbd09bcf5709282af6bdebd)
上述只要尚未完成遍历字典,for循环将持续进行,如此就可以完成遍历字典,同时传回所有的键-值。
程序实例ch9_17.py:列出players字典所有元素,相当于所有球员数据。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P118_58856.jpg?sign=1739605743-oOTNhfRA024k0cUVLNEKPm5FJbJ2VvuS-0-9d627f8f756184cc04605faa4e089f00)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P118_58862.jpg?sign=1739605743-DyWBA94UV4CbHdMJaIybhKyQXKTmkSis-0-37846eaf0e04f889fbf29130674b0a7c)
上述实例的执行结果中虽然元素出现顺序与程序第2行到第6行的顺序相同,不过读者须了解Python的直译器并不保证未来一定会保持相同顺序,因为字典(dict)是一个无序的数据结构,Python只会保持键-值,不会关注元素的排列顺序。
9-2-2 遍历字典的键
有时候我们不想要取得字典的值(value),只想要键(keys),Python有提供方法keys( ),可以让我们取得字典的键内容,若是以ch9_16.py的players字典为实例,可以使用for循环加上keys( )方法,如下所示:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P118_58867.jpg?sign=1739605743-SbBPdjMfVc4FccWXTmyPTOFWeIdawsUF-0-54c276065d768e47d39a8bea72f2eef2)
上述for循环会依次将players字典的键传回。
程序实例ch9_18.py:列出players字典所有的键(keys),此例是所有球员名字。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P118_58870.jpg?sign=1739605743-BdpTqh75ZfJD9f1iNnBn0KyGPE2I4Gon-0-c37dda8465c51634fb4931b73bab8f71)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P119_59276.jpg?sign=1739605743-0EKZ5RMf6nWvmAndqRHYkYNyLif9Aasu-0-a3c3e852d568cc65dfbe6b3435e8cee5)
其实上述实例第7行也可以省略keys( )方法,而获得一样的结果,未来各位设计程序是否使用keys( ),可自行决定,细节可参考ch9_19.py的第7行。
程序实例ch9_19.py:重新设计ch9_18.py,此程序省略了keys( )方法,但增加一些输出问候语句。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P119_59279.jpg?sign=1739605743-hpcJQ9WtD7rQiY18BSI3GFVvWzwit0Tb-0-fe785e8a89bc392d4d3268295f98e73a)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P119_59285.jpg?sign=1739605743-IuCSkgV0acO1p4piV37EXxSxUj0HGyI2-0-bf761fb65786cd9c6a0a132aed23fcd8)
9-2-3 排序与遍历字典
Python的字典功能并不会处理排序,如果想要遍历字典同时列出排序结果,可以使用方法sorted( )。
程序实例ch9_20.py:重新设计程序实例ch9_19.py,但是名字将以排序方式列出结果,这个程序的重点是第7行。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P119_59289.jpg?sign=1739605743-nO30G9AJqupo4fByUWJpcvxPiJwova76-0-3be514e113a8957e683744b541e639f5)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P119_59295.jpg?sign=1739605743-iO8qEROerFukJroIHLeKGhru0NBGFyW9-0-a2515bb6b45aace5b14ddfc38d5a98a6)
9-2-4 遍历字典的值
Python有提供方法values( ),可以让我们取得字典值列表,若是以ch9_16.py的players字典为实例,可以使用for循环加上values( )方法,如下所示:
程序实例ch9_21.py:列出players字典的值列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P120_59705.jpg?sign=1739605743-8gJmljyIKg172x6Ru1X7RZJmXWoLei18-0-8e153825e1fe5b9d561263d2ed17fdc9)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P120_59711.jpg?sign=1739605743-MiIviuqu99WMIlJq9ti12bDve9rGA9Ik-0-0433e85539c53b8d0cd13b398bb74438)
上述Golden State Warriors重复出现,在字典的应用中键不可有重复,值是可以重复,如果你希望所列出的值不要重复,可以使用集合(set)观念使用set( )函数,例如将第7行改为下列所示即可,这个实例放在ch9_21_1.py,读者可自行参考。这是下一章的主题,更多细节将在下一章解说。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P120_59714.jpg?sign=1739605743-6NIXahQUyZQKySW5PNaducAnfRJaK0lu-0-0c01eeb6d6f6fc757a2b136f5fd37745)
下列是执行结果,可以发现Golden State Warriors不重复了。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P120_59717.jpg?sign=1739605743-U1t3HFWllpQfO0Ipg5Uif6wWlPjpJ2jO-0-b0b1a1b3be2ff3b410c39ec8f84faa2f)