字典——排序键/for 循环

未匹配的标注

之前提到:因字典不是序列,它们不维护任何可靠的从左到右的顺序。如果创建了一个字典然后打印出来,它的键显示的顺序可能和我们键入的不同,而且可能根据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循环和所有类似它的从左到右迭代对象的结构,都不只是序列操作,它们是迭代操作——就像下一节描述的。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~