6.1 使用 enumerate()
我们之前已经讨论过在字典中使用keys、values和items进行循环。现在让我们详细了解一下enumerate()函数。
enumerate()函数对遍历字典元素很有帮助,可以同时访问索引、键和值。
以下是一些使用enumerate()遍历字典的例子:
通过索引遍历字典的键和值
你可以使用enumerate()遍历字典的键和值,同时获取索引。
# 字典中人的数据
person = {"name": "Alice", "age": 25, "city": "New York"}
# 使用索引遍历字典的键和值
for index, (key, value) in enumerate(person.items()):
print(f"索引: {index}, 键: {key}, 值: {value}")
# 打印出每个字典元素的索引、键和值
输出:
索引: 0, 键: name, 值: Alice
索引: 1, 键: age, 值: 25
索引: 2, 键: city, 值: New York
使用索引转换字典的值
可以使用enumerate()根据索引来改变字典的值。
# 原始字典
person = {"name": "Alice", "age": 25, "city": "New York"}
# 在值中使用索引的新字典
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# 给字典的值加上索引作为字符串
print(indexed_person)
# 输出带有索引的新字典
输出:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
使用 enumerate() 创建新字典
你可以使用enumerate()创建一个新的字典,其中索引作为键。
# 原始字典
person = {"name": "Alice", "age": 25, "city": "New York"}
# 使用索引作为键的新字典
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# 输出以索引为键的新字典
输出:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 字典生成器
我们已经使用列表生成式来生成列表,用集合生成式来生成集合。类似地,可以使用生成器语法来创建字典。 字典生成器允许我们编写更简洁和可读性更高的代码来创建字典。
基本的字典生成式语法如下:
{表达式1: 表达式2 for 变量 in 序列 if 条件}
其中
-
变量— 获取可迭代对象的每个元素的变量。 -
序列— 可迭代对象(例如列表、元组、字符串),该变量可以遍历。 -
表达式1— 生成字典键的表达式。通常依赖于变量。 -
表达式2— 生成字典值的表达式。 -
条件— (可选)必须满足的条件才能将元素包括在字典中。
例子 1:
创建具有数字平方的字典
# 创建一个字典,其键是1到5的数字,值是它们的平方
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
例子 2:
从元组列表创建字典
# 含有键值对的元组列表
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# 从元组列表生成字典
person = {key: value for key, value in pairs}
print(person) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
例子 3:
在创建字典時过滤元素
# 创建一个字典,其键是1到10的数字,值是它们的平方
# 只针对偶数
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # 输出: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
例子 4:
在创建字典时转换元素
# 字符串列表
words = ["apple", "banana", "cherry"]
# 生成一个字典,其中键是字符串,值是它们的长度
word_lengths = {word: len(word) for word in words}
print(word_lengths) # 输出: {'apple': 5, 'banana': 6, 'cherry': 6}
嵌套的字典生成器
# 含有键值对的列表
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# 从嵌套列表生成字典
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # 输出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
组合方法
可以组合不同的创建字典的方法以应对更复杂的情况。
# 将多个字典合并为一个
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # 输出: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
使用操作符 **在字典名之前可以解包它的元素,就像它们被列在一行中一样。因此,表达式{**dict1, **dict2}实际上将两个字典的元素合并。
GO TO FULL VERSION