如何用 Python 生成新字典

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将探索Python字典的强大功能,为开发者提供生成、修改和转换字典对象的全面技术。通过理解各种字典创建方法和转换策略,程序员可以提高他们的数据处理技能,并编写更高效的Python代码。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/dictionaries -.-> lab-435116{{"如何用 Python 生成新字典"}} python/data_collections -.-> lab-435116{{"如何用 Python 生成新字典"}} end

字典基础

Python 中的字典是什么?

Python 中的字典是一种强大且通用的数据结构,用于存储键值对。与使用数字索引的列表不同,字典使用唯一的键来高效地访问和管理数据。

字典的关键特性

特性 描述
可变 创建后可以修改
无序 键的存储顺序不固定
键值对 每个元素由一个键及其对应的值组成
键唯一 字典中的每个键必须是唯一的

基本字典创建

## 空字典
empty_dict = {}
empty_dict_alt = dict()

## 带有初始值的字典
student = {
    "name": "Alice",
    "age": 22,
    "major": "Computer Science"
}

字典键的类型

字典支持多种键类型,但键必须是不可变的:

  • 字符串
  • 数字
  • 元组
  • 冻结集合
graph TD A[字典键] --> B[字符串] A --> C[数字] A --> D[元组] A --> E[冻结集合]

访问字典元素

student = {
    "name": "Alice",
    "age": 22,
    "major": "Computer Science"
}

## 通过键访问
print(student["name"])  ## 输出: Alice

## 使用 get() 方法(更安全)
print(student.get("age"))  ## 输出: 22
print(student.get("grade", "未找到"))  ## 提供默认值

常见字典操作

## 添加/更新元素
student["grade"] = "A"
student["age"] = 23

## 删除元素
del student["grade"]
removed_value = student.pop("age")

## 检查键是否存在
if "name" in student:
    print("名字存在")

为什么使用字典?

字典适用于:

  • 存储结构化数据
  • 快速查找
  • 映射关系
  • 配置设置
  • 缓存和记忆化

在 LabEx,我们建议掌握字典,因为它们是高效 Python 编程的基础。

字典创建方法

基本字典初始化

## 字面量方法
empty_dict = {}
person = {"name": "John", "age": 30}

## dict() 构造函数方法
empty_dict_alt = dict()
person_alt = dict(name="John", age=30)

从序列创建字典

## 将 dict() 与 zip() 一起使用
keys = ["name", "age", "city"]
values = ["Alice", 25, "New York"]
student = dict(zip(keys, values))

## 从元组列表创建
person_list = [("name", "Bob"), ("age", 35)]
person_dict = dict(person_list)

字典推导式

## 从现有序列创建字典
squares = {x: x**2 for x in range(6)}
## 结果: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

## 条件字典推导式
filtered_squares = {x: x**2 for x in range(10) if x % 2 == 0}

高级创建方法

graph TD A[字典创建方法] --> B[字面量] A --> C[构造函数] A --> D[推导式] A --> E[从序列]

转换方法

方法 描述 示例
fromkeys() 使用默认值创建字典 dict.fromkeys(['a', 'b'], 0)
copy() 字典的浅拷贝 new_dict = original_dict.copy()

实际示例

## 创建具有默认值的字典
default_config = dict.fromkeys(['host', 'port', 'database'], None)

## 动态创建字典
def create_user_dict(username, **kwargs):
    base_dict = {"username": username}
    base_dict.update(kwargs)
    return base_dict

user = create_user_dict("labex_user", email="[email protected]", role="developer")

性能考量

## 高效的字典创建
import timeit

## 比较创建方法
literal_time = timeit.timeit("{x: x**2 for x in range(1000)}", number=1000)
constructor_time = timeit.timeit("dict((x, x**2) for x in range(1000))", number=1000)

最佳实践

  • 使用最具可读性的方法
  • 根据数据源选择方法
  • 对于大型字典考虑性能
  • 利用 LabEx 的 Python 学习资源以深入理解

字典转换

键转换技术

## 更改键
original = {"name": "John", "age": 30}
transformed = {k.upper(): v for k, v in original.items()}

字典合并方法

## 使用 update() 方法
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
dict1.update(dict2)

## 解包运算符
merged = {**dict1, **dict2}

值操作

## 转换值
prices = {"apple": 0.5, "banana": 0.3}
discounted = {k: v * 0.9 for k, v in prices.items()}

字典过滤

## 过滤字典
original = {"a": 1, "b": 2, "c": 3}
filtered = {k: v for k, v in original.items() if v > 1}

高级转换

graph TD A[字典转换] --> B[键更改] A --> C[值修改] A --> D[合并] A --> E[过滤]

嵌套字典转换

## 转换嵌套字典
users = {
    "user1": {"name": "Alice", "age": 30},
    "user2": {"name": "Bob", "age": 25}
}

transformed_users = {
    k: {inner_k: inner_v.upper() if isinstance(inner_v, str) else inner_v
        for inner_k, inner_v in v.items()}
    for k, v in users.items()
}

转换方法

方法 描述 示例
keys() 获取字典的键 list(my_dict.keys())
values() 获取字典的值 list(my_dict.values())
items() 获取键值对 list(my_dict.items())

性能优化

## 高效的字典转换
import collections

## 将字典转换为 defaultdict
regular_dict = {"a": 1, "b": 2}
default_dict = collections.defaultdict(int, regular_dict)

复杂转换

## 分组和聚合
data = [
    {"name": "Alice", "category": "A"},
    {"name": "Bob", "category": "B"},
    {"name": "Charlie", "category": "A"}
]

grouped = {}
for item in data:
    category = item['category']
    if category not in grouped:
        grouped[category] = []
    grouped[category].append(item['name'])

最佳实践

  • 使用推导式进行简洁的转换
  • 避免在迭代期间修改字典
  • 对于大型字典考虑性能
  • 利用 LabEx 的 Python 转换技术

总结

通过掌握 Python 字典技术,开发者能够有效地创建、修改和转换键值数据结构。本教程涵盖了字典创建、推导式和转换的基本方法,使程序员能够在各种编程场景中编写更简洁、强大的 Python 代码。