字典——排序键/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
循环和所有类似它的从左到右迭代对象的结构,都不只是序列操作,它们是迭代操作——就像下一节描述的。