简介
在 Python 编程中,根据现有数据结构创建字典是一项基本技能,它使开发人员能够高效地转换和操作数据。本教程将探讨生成新字典的各种技术,深入了解 Python 强大的字典创建方法和推导策略。
在 Python 编程中,根据现有数据结构创建字典是一项基本技能,它使开发人员能够高效地转换和操作数据。本教程将探讨生成新字典的各种技术,深入了解 Python 强大的字典创建方法和推导策略。
Python 中的字典是一种通用且强大的数据结构,用于存储键值对。与使用数字索引的列表不同,字典使用唯一的键来高效地访问和管理数据。
| 特性 | 描述 |
|---|---|
| 可变 | 创建后可以修改 |
| 无序 | 元素顺序无保证 |
| 键值对 | 每个元素由一个键及其对应的值组成 |
| 键唯一 | 字典中的每个键必须是唯一的 |
## 空字典
empty_dict = {}
empty_dict_constructor = dict()
## 带有初始值的字典
student = {
"name": "Alice",
"age": 22,
"courses": ["Python", "数据科学"]
}
字典支持多种键类型,但键必须是不可变的:
## 有效的字典键
mixed_dict = {
"name": "John",
42: "答案",
(1, 2): "坐标"
}
student["grade"] = "A"
name = student["name"]
age = student.get("age", 0) ## 键不存在时的默认值
student["age"] = 23
del student["courses"]
student.pop("grade")
| 方法 | 描述 |
|---|---|
keys() |
返回所有键 |
values() |
返回所有值 |
items() |
返回键值对 |
clear() |
删除所有元素 |
Python 中的字典通过哈希表实现,具有以下特点:
KeyError 异常.get() 方法进行安全访问defaultdict在 LabEx,我们建议掌握字典基础,以有效提升你的 Python 编程技能。
## 直接初始化
person = {
"name": "John",
"age": 30,
"city": "纽约"
}
## 使用 dict() 构造函数
student = dict(
name="Alice",
age=22,
major="计算机科学"
)
## 字典推导
squares = {x: x**2 for x in range(6)}
## 结果: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
keys = ['a', 'b', 'c']
values = [1, 2, 3]
converted_dict = dict(zip(keys, values))
## 结果: {'a': 1, 'b': 2, 'c': 3}
users = {
'user1': {'name': 'Alice', 'age': 30},
'user2': {'name': 'Bob', 'age': 25}
}
fromkeys() 方法## 创建带有默认值的字典
default_dict = dict.fromkeys(['a', 'b', 'c'], 0)
## 结果: {'a': 0, 'b': 0, 'c': 0}
| 方法 | 描述 | 行为 |
|---|---|---|
.copy() |
浅复制 | 创建新字典 |
dict() |
浅复制 | 创建新字典 |
copy.deepcopy() |
深复制 | 递归复制嵌套结构 |
import copy
original = {'a': [1, 2, 3]}
shallow_copy = original.copy()
deep_copy = copy.deepcopy(original)
## 从函数生成字典
def generate_dict(start, end):
return {x: x**2 for x in range(start, end)}
power_dict = generate_dict(1, 5)
## 结果: {1: 1, 2: 4, 3: 9, 4: 16}
.update() 调用更快在 LabEx,我们建议掌握这些字典创建技术,以编写更高效、更具表现力的 Python 代码。
## 根据条件过滤字典
original = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
filtered = {k: v for k, v in original.items() if v > 2}
## 结果: {'c': 3, 'd': 4}
def is_even(item):
return item[1] % 2 == 0
original = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
even_dict = dict(filter(is_even, original.items()))
## 结果: {'b': 2, 'd': 4}
## 转换字典的值
prices = {'苹果': 0.5, '香蕉': 0.3, '橙子': 0.6}
含税价格 = {k: v * 1.1 for k, v in prices.items()}
## 结果: 每个价格增加10%的税
## 将键转换为大写,值平方
original = {'a': 1, 'b': 2, 'c': 3}
transformed = {k.upper(): v**2 for k, v in original.items()}
## 结果: {'A': 1, 'B': 4, 'C': 9}
| 合并方法 | Python版本 | 描述 |
| -------------------- | ---------- | ------------ | ---------------- |
| update() | 所有版本 | 修改原始字典 |
| | 运算符 | 3.9+ | 创建新的合并字典 |
| {**dict1, **dict2} | 3.5+ | 解包方法 |
## 合并字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
## 方法1: update()
dict1.update(dict2)
## 方法2: 合并运算符 (Python 3.9+)
merged = dict1 | dict2
## 方法3: 解包
merged = {**dict1, **dict2}
## 交换键和值
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
## 结果: {1: 'a', 2: 'b', 3: 'c'}
## 在反转过程中处理重复值
original = {'a': 1, 'b': 2, 'c': 2}
inverted = {}
for k, v in original.items():
inverted.setdefault(v, []).append(k)
## 结果: {1: ['a'], 2: ['b', 'c']}
## 转换嵌套字典
users = {
'user1': {'age': 25, 'city': '纽约'},
'user2': {'age': 30, 'city': '旧金山'}
}
年轻用户 = {
k: v for k, v in users.items() if v['age'] < 30
}
在LabEx,我们建议掌握这些字典转换技术,以编写更灵活、高效的Python代码。
通过掌握 Python 中的这些字典转换技术,开发人员可以编写更简洁、易读且高效的代码。理解如何从其他数据结构创建字典,能使程序员轻松且优雅地处理复杂的数据操作任务,最终提升他们的 Python 编程技能。