CodeGym /课程 /Python SELF ZH /字典循环和生成器

字典循环和生成器

Python SELF ZH
第 11 级 , 课程 6
可用

6.1 使用 enumerate()

我们之前已经讨论过在字典中使用keysvaluesitems进行循环。现在让我们详细了解一下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}实际上将两个字典的元素合并。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION