从py3.7起,遍历字典时将按插入的顺序返回其中的元素。不过在有些情况下可能要按与此不同的顺序遍历字典。要以特定顺序返回元素,一种办法是在 for 循环中返回的键进行排序。为此可使用函数 sorted() 来获得按特定顺序排列的键列表的副本:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted (favorite_languages.keys()):
print (f"{name.title()},thank you for taking the poll.")
这条 for 语句类似于其他for语句,不同之处是对方法 dictionary。keys()的结果调用了函数 sorted().这让py列出字典中所有的键,并在遍历前对这个列表进行排序。输出表明,按顺序显示了所有被调查者的名字。
输出:Edward,thank you for taking the poll.
Jen,thank you for taking the poll.
Phil,thank you for taking the poll.
Sarah,thank you for taking the poll.
重点:for xxx in nnn.values():
如果主要对字典包含的值感兴趣,可使用方法values()来返回一个值列表,不包含任何键。例如,假设我们想获得一个列表,其中只包含被调查者选择的各种语言,而不包含被调查者的名字,可以这样做:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print ("The following languages have been mentioned:")
for language in favorite_languages.values():
print (language.title)
这条 for 语句提取字典中的每个值,并将其依次赋给变量 1anguage。通过打印这些值,就获得了一个包含被调查者所选择语言的列表:
输出:The following languages have been mentioned:
Python
C
Ruby
Python
这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,
但如果被调查者很多,最终的列表可能包含大量重复项。为剔除重复项,可使用集合(set)
集合中的每个元素都必须是独一无二的:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print ("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print (language.title())
输出:The following languages have been mentioned:
Python
C
Ruby
注意:可使用一对花括号直接创建集合,并在其中用逗号分隔元素:
languages ={'python','zuby','python','c'}
languages
{'ruby','python','c'}
集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有键值对时,
定义的很可能是集合。不同于列表和字典,集合不会以特定的顺序存储元素。



