遍历字典的学习
一个Python字典可能只包含几个键—值对,也可能包含数百万个键—值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键—值对、键或值。
1.遍历所有的键—值对
下面的字典存储一名用户的用户名、名和姓:
user_0 = {
'username': 'zhang',
'frist': 'jibin',
'last': 'zhangjibin'
}
可以使用一个for循环来遍历这个字典:
user_0 = {
'username': 'zhang',
'frist': 'jibin',
'last': 'zhangjibin'
}
for key,value in user_0.items():
print("\nKey: " +key)
print("Value: " +value)
要编写用于遍历字典的for循环,可声明两个变量,用于存储键—值对中的键和值。对于这两个变量,可使用任何名称。
for语句的第二部分包含字典名和方法items(),它返回一个键—值对列表。
for循环依次将每个键—值对存储到指定的两个变量中。
打印结果为:
Key: username
Value: zhang
Key: frist
Value: jibin
Key: last
Value: zhangjibin
注意,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。
Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系。
例如:
favorite_languages = {
'zjb': 'python',
'zhang': 'c',
'zhangji': 'ruby',
'zhangjibin': 'java'
}
for name,language in favorite_languages.items():
print(name.title() + "'s favorite language is " + language.title() + ".")
输出结果为:
Zjb's favorite language is Python.
Zhang's favorite language is C.
Zhangji's favorite language is Ruby.
Zhangjibin's favorite language is Java.
2.遍历字典中的所有键
在不需要使用字典中的值时,方法keys()很有用。
例如:
favorite_languages = {
'zjb': 'python',
'zhang': 'c',
'zhangji': 'ruby',
'zhangjibin': 'java'
}
for name in favorite_languages.keys():
print(name.title())
输出结果为:
Zjb
Zhang
Zhangji
Zhangjibin
遍历字典时,会默认遍历所有的键。
如果将上述代码中的for name infavorite_languages.keys():替换为for name in favorite_languages:,输出将不变。
在这种循环中,可使用当前键来访问与之相关联的值。
例如:
favorite_languages = {
'zjb': 'python',
'zhang': 'c',
'zhangji': 'ruby',
'zhangjibin': 'java'
}
friends = ['zhangjibin','zhang']
for name in favorite_languages:
print("\nname:" + name.title())
if name in friends:
print("Hi " + name.title() +
", I see your favorite language is " +
favorite_languages[name].title() + "!")
打印结果为:
name:Zjb
name:Zhang
Hi Zhang, I see your favorite language is C!
name:Zhangji
name:Zhangjibin
Hi Zhangjibin, I see your favorite language is Java!
3.按顺序遍历字典中的所有键
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。获取与键相关联的正确的值。要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函数sorted()来获得按特定顺序排列的键列表的副本:
favorite_languages = {
'zjb': 'python',
'zhang': 'c',
'zhangji': 'ruby',
'zhangjibin': 'java'
}
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")
打印结果为:
Zhang, thank you for taking the poll.
Zhangji, thank you for taking the poll.
Zhangjibin, thank you for taking the poll.
Zjb, thank you for taking the poll.
输出表明,按顺序显示了所有被调查者的名字。
4.遍历字典中的所有值
可使用方法values(),它返回一个值列表,而不包含任何键。
例如:
favorite_languages = {
'zjb': 'python',
'zhang': 'c',
'zhangji': 'ruby',
'zhangjibin': 'java'
}
print("The following languages have been mentioned")
for language in favorite_languages.values():
print(language.title())
打印结果为:
The following languages have been mentioned
Python
C
Ruby
Java
最终的列表可能包含大量的重复项。
为剔除重复项,可使用集合(set)。
例如:
favorite_languages = {
'zjb': 'python',
'zhang': 'c',
'zhangji': 'ruby',
'zhangjibin': 'python',
}
print("The following languages have been mentioned")
for language in set(favorite_languages.values()):
print(language.title())
打印结果为:
The following languages have been mentioned
C
Python
Ruby