Python 字典可以存储从几个到数百万个不等的键值对,适用于多种信息存储需求。根据不同的使用场景,我们可以选择遍历字典的所有键值对、仅遍历键或仅遍历值。
遍历所有键值对
在开始探索各种遍历方法之前,让我们先创建一个包含用户信息的新字典示例:
1
2
3
4
5
| user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
|
要访问 user_0
中的信息很简单,但如果需要获取该字典中所有数据,则可以通过 for
循环来实现:
1
2
3
| for key, value in user_0.items():
print(f"\nKey: {key}")
print(f"Value: {value}")
|
在这个例子中,我们通过声明两个变量 key
和 value
来分别存储每个键值对中的键和值。你可以为这两个变量选择任何名称。例如,下面的代码使用了更简单的变量名 k
和 v
:
1
| for k, v in user_0.items():
|
请注意,items()
方法返回的是一个键值对列表,for
循环会依次将每个键值对分配给指定的变量。上面的示例中,我们使用这些变量打印出每个键及其对应的值,其中 "\n"
确保了输出时每个键值对前都有一个空行。
对于像 favorite_languages
这样的字典,它存储的是不同人的同一种类型的信息(如他们喜欢的编程语言),遍历所有的键值对非常合适:
1
2
3
4
5
6
7
8
9
| favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name, language in favorite_languages.items():
print(f"{name.title()}'s favorite language is {language.title()}.")
|
这段代码不仅展示了如何遍历字典中的每个键值对,还示范了如何使用更具描述性的变量名(如 name
和 language
),这有助于提高代码的可读性。输出结果清晰地显示了每个人的名字以及他们最喜欢的编程语言:
1
2
3
4
| Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Rust.
Phil's favorite language is Python.
|
即使字典中包含了数千甚至上百万条调查记录,这种循环方式同样适用。请确保你的代码逻辑正确且简洁,以适应更大规模的数据处理需求。注意修正代码中的小错误,比如遗漏的冒号,以保证程序的正常运行。
遍历字典中的所有键
当你只关心字典中的键而不需要使用对应的值时,可以使用 keys()
方法。下面的例子展示了如何遍历字典 favorite_languages
并打印每个被调查者的名字:
1
2
3
4
5
6
7
8
9
| favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name in favorite_languages.keys():
print(name.title())
|
这段代码提取了字典 favorite_languages
中的所有键,并将它们依次赋给变量 name
。输出结果列出了每个被调查者的名字:
1
2
3
4
| Jen
Sarah
Edward
Phil
|
值得注意的是,在遍历字典时,默认情况下会遍历所有的键。因此,如果将上述代码中的 for name in favorite_languages.keys():
替换为 for name in favorite_languages:
,输出结果将保持不变。
虽然显式地使用 keys()
方法可以使代码更加清晰易懂,但根据个人偏好,你也可以选择省略它。
此外,你还可以在循环中利用当前的键访问关联的值。例如,下面的代码段会打印两条消息,指出两个特定朋友喜欢的编程语言:
1
2
3
4
5
6
7
8
9
10
11
12
13
| favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(f"Hi {name.title()}.")
if name in friends:
language = favorite_languages[name].title()
print(f"\t{name.title()}, I see you love {language}!")
|
首先定义了一个包含要发送特殊消息的朋友列表。然后,在循环中,对于名字出现在 friends
列表中的每个人,都会打印一条特别的消息,指出他们喜爱的语言。这个例子的输出如下:
1
2
3
4
5
6
| Hi Jen.
Hi Sarah.
Sarah, I see you love C!
Hi Edward.
Hi Phil.
Phil, I see you love Python!
|
另外,你可以使用 keys()
方法检查某个人是否接受了调查。例如,确定 Erin 是否参与了调查:
1
2
| if 'erin' not in favorite_languages.keys():
print("Erin, please take our poll!")
|
由于 'erin'
不在 favorite_languages
的键列表中,程序会打印一条消息邀请她参加调查:
1
| Erin, please take our poll!
|
通过这种方式,不仅可以遍历字典中的键,还能执行其他操作如验证或条件判断,以增加代码的功能性和灵活性。
按特定顺序遍历字典中的所有键
默认情况下,Python 遍历字典时会按照插入元素的顺序返回键值。然而,在某些情况下,你可能希望以不同的顺序遍历字典中的键。为了实现这一点,可以使用 sorted()
函数对字典的键进行排序。
例如,下面的代码展示了如何按字母顺序遍历字典 favorite_languages
中的所有键,并打印一条感谢信息:
1
2
3
4
5
6
7
8
9
| favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(f"{name.title()}, thank you for taking the poll.")
|
这里,我们对 favorite_languages.keys()
的结果调用了 sorted()
函数,让 Python 在遍历前对键列表进行排序。输出如下:
1
2
3
4
| 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.
|
遍历字典中的所有值
当你只关心字典中的值而不涉及键时,可以使用 values()
方法来获取一个仅包含值的列表。这在你想要查看所有被调查者选择的语言但不关心他们是谁的情况下非常有用。
示例代码如下:
1
2
3
4
5
6
7
8
9
10
| favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in favorite_languages.values():
print(language.title())
|
这段代码将字典中每个值依次赋给变量 language
并打印出来。输出结果为:
1
2
3
4
5
| The following languages have been mentioned:
Python
C
Rust
Python
|
然而,当数据量较大时,这种方法可能会导致重复值出现。为了避免这种情况,可以使用集合(set
),它确保了每个元素都是唯一的:
1
2
3
| print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print(language.title())
|
通过将 favorite_languages.values()
传递给 set()
,Python 将自动去除重复项并创建一个仅包含独一无二语言的集合。输出结果如下:
1
2
3
4
| The following languages have been mentioned:
Python
C
Rust
|
需要注意的是,集合和字典都使用花括号 {}
定义,但是集合中没有键值对,且不会保持任何特定的顺序。如果你尝试直接定义一个集合,比如 languages = {'python', 'rust', 'python', 'c'}
, Python 将自动处理重复项,并保留唯一值。例如:
1
2
| languages = {'python', 'rust', 'python', 'c'}
print(languages)
|
输出将是:
1
| {'rust', 'python', 'c'}
|
这样,你可以有效地管理和展示数据,同时避免不必要的重复。