遍历Python字典的全部姿势,你都知道吗?

5,140 阅读3分钟

文 | 猿天罡

本文首发于公众号「猿天罡」,转载请注明出处,谢谢!

前言

一个Python字典短则包含一个键值对,长则可能数以百万计。所以我们不会遍历字典可不行。因为Python字典是由一系列键值对组成的,所以我们可以遍历字典的所有键值对、键或值。

1.遍历字典中所有的键值对

我们还是从一个学生字典开始:

student = {'num': '123456', 'name': 'kelvin', 'age': 18}

前面文章中我们知道怎么访问student字典中任何一项的信息,但如果要想访问字典中的所有信息该怎么办呢?

我们可以使用一个 for 循环来遍历这个字典:

student = {'num': '123456', 'name': 'kelvin', 'age': 18}

for key, value in student.items():
    print("\nKey: " + key)
    print("Value: " + str(value)) # 因为age对应的是数字类型,所以用str()方法将其转化成字符串

从代码可以看到,我们声明了两个变量 keyvalue 去存储键值对中的键和值。它们可以任意取名

你甚至可以这样写:

for a, b in student.items():

这样写是没有关系的,不过为了见名知义,我还是建议叫 keyvalue

眼尖的小伙伴可能注意到 in 后面跟着的不是字典本身,而是 student.items(),它返回的是一个键值对列表,事实上如果你 print(student.items())的话,输出结果如下:

dict_items([('num', '123456'), ('name', 'kelvin'), ('age', 18)])

可见确实是键值对组成的元组列表。

接下来,for 循环依次将每一个键值对元组存储到指定的两个变量中(keyvalue)。

运行上述遍历student字典的代码:

图1-1

注意:遍历字典时,键值对的返回顺序可能会与存储顺序不同。事实上,这点对我们编写程序并无影响。

2.遍历字典的所有键

有的时候,我们可能并不关心值是多少,可以使用方法 keys()keys() 方法会返回一个键列表。

student = {'num': '123456', 'name': 'kelvin', 'age': 18}

for key in student.keys():
    print(key)

上述代码会打印出字典中所有的键:

图2-1

与遍历所有键值对代码进行比较,会发现 for 后面仅跟着一个变量,而且 in 关键字后面遍历的对象是 student.keys(),我们试着 print(student.keys()) 可以看到 keys() 方法返回的是一个键列表

图2-2

我们甚至可以把 keys() 方法省略,因为遍历字典的时候,如果你在 for 后面仅声明一个变量,Python会默认遍历所有的键并依次将键赋值给这个变量。

因此,我们代码也可以这样写:

student = {'num': '123456', 'name': 'kelvin', 'age': 18}
for key in student:
    print(key)

输出结果和上面是一样的。

Python提供了非常灵活的语法,你可以自由地选择自己喜欢的写法。

3.遍历字典中的所有值

有时候我们仅需要遍历字典中的所有值而不关心键到底是什么,可以使用方法 values()values() 方法会返回一个值列表。

如果我们想打印出学生字典中所有的值:

student = {'num': '123456', 'name': 'kelvin', 'age': 18}

for value in student.values():
    print(value)

运行这段代码,效果如下:

图3-1

确实打印出了student字典里所有的值。

能够打印出所有值的关键在于 student.values() 方法返回了一个值列表。

图3-2

Python遍历这个值列表并依次将值赋给 value 变量,然后打印输出。

结尾语

本文主要讲解了Python遍历字典的三种方式,应该还是比较简单的。

笔者一直力求将复杂艰涩的概念讲得浅显易懂,但因为个人能力或许考虑的并不周全。如果您对文中讲的内容有任何疑惑,欢迎私信和我交流。

扫码关注「猿天罡」