字典——排序键/for 循环 | 第二部分 类型与操作 —— 第 4 章: 介绍 python 对象类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-金年会app官方网

未匹配的标注

之前提到:因字典不是序列,它们不维护任何可靠的从左到右的顺序。如果创建了一个字典然后打印出来,它的键显示的顺序可能和我们键入的不同,而且可能根据python版本和其他变量的不同而异:

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> d
{'a': 1, 'c': 3, 'b': 2}

然而,如果确实需要对字典的项进行强制排序,需要做什么呢?一个常见的办法是使用字典的keys方法抓取键的列表,以列表的sort方法来排序,然后使用python的for循环来迭代结果(和 if 一样,确保在编码下面的for循环后按两次回车键,并且在python 2.x中省略掉 print 中的外层小括号):

>>> ks = list(d.keys()) # 未排序的键列表
>>> ks # 2.x中的列表, 在3.x中“查看”: 使用 list()
['a', 'c', 'b']
>>> ks.sort() # 排序键列表
>>> ks
['a', 'b', 'c']
>>> for key in ks: # 迭代排序后的键
        print(key, '=>', d[key]) # <== 这里按回车两次 (3.x print)
a => 1
b => 2
c => 3

注:在python 3.10中,字典的键的显示顺序和其键入顺序一致,所以并不需要排序。

然而,后面章节会看到这是一个三步过程,在最近版本的python中,使用(比sort)更新的 sorted 内置函数可以一步到位。sorted函数调用返回结果并对许多对象类型排序,在本例中对字典的键自动进行排序:

>>> d
{'a': 1, 'c': 3, 'b': 2}
>>> for key in sorted(d):
                print(key, '=>', d[key])
a => 1
b => 2
c => 3

除了展示字典,这个用例用来介绍python的for循环。for循环是一个简单有效的方法,它对序列中所有项进行迭代并对每个项轮流运行一个代码块。用户定义的循环变量(这里是 key)用来引用整个过程中每次循环的当前项。例子中的最终结果是按排序后的键顺序,打印出无序字典的键和值。

for循环和它更通用的兄弟——while 循环,是在脚本中编码重复任务为语句的主要方式。然而,for循环真的很像之前介绍的它的亲戚——列表理解,是一个序列操作。它适用于任何序列对象,就像列表理解一样,甚至还适用于一些不是序列的对象。比如,这里是它迭代字符串中的字符,打印出这个过程中每个字符的大写版本:

>>> for c in 'spam':
                print(c.upper())
s
p
a
m

python的while循环是一种更通用的循环工具;它不限于迭代序列,但通常要更多代码来完成工作:

>>> x = 4
>>> while x > 0:
        print('spam!' * x)
        x -= 1
spam!spam!spam!spam!
spam!spam!spam!
spam!spam!
spam!

本书后面将深入探讨循环语句,语法和工具。然而,首先我需要坦白这一节没有最大限度地提供了足够多的信息。的确,for循环和所有类似它的从左到右迭代对象的结构,都不只是序列操作,它们是迭代操作——就像下一节描述的。

本文章首发在 金年会app官方网 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图