Python 字典(Dictionary)
Python 字典(Dictionary)中文讲解(2025年)
Python 字典(dict
)是 Python 的内置数据结构,用于存储键值对(key-value pairs),提供高效的键查找功能。相比列表或数组,字典以键(而非索引)访问值,适合表示映射关系(如配置文件、数据库记录)。2025年,Python 字典在 Python 3.12/3.13 中因性能优化(如更快的哈希算法)更高效,广泛应用于数据处理、Web 开发和跨平台项目(如 Kotlin Multiplatform,KMP)。本教程详细讲解字典的语法、操作和实践,基于 Python 官方文档、CSDN 和 Python 社区,适合初学者和开发者。建议在 Python 3.9+(推荐 3.12/3.13)环境中用 PyCharm 或 VS Code 练习。
一、Python 字典概览(必知)
- 定义:字典是一种无序(Python 3.7+ 有序)、可变的键值对集合,键必须是不可变类型(如字符串、数字、元组),值可以是任意类型。
- 核心用途:
- 存储和查询键值对(如用户配置、JSON 数据)。
- 数据处理(如统计词频、聚合数据)。
- 作为函数参数或返回值(如 API 响应)。
- 特点:
- 高效查找:基于哈希表,键查找时间复杂度 O(1)。
- 灵活性:支持动态增删键值对。
- 可嵌套:值可以是字典、列表等复杂结构。
- 2025年趋势:
- Python 3.13 优化字典的内存使用和哈希性能。
- 在数据科学中,字典常结合
pandas
和numpy
处理结构化数据。 - 在 KMP 项目中,字典用于 Python 模块与 Kotlin 交互,传递 JSON 数据。
二、核心语法与用法(必会)
以下按功能讲解字典的核心操作,包含示例代码,可直接运行。
1. 创建字典
- 字面量创建:
my_dict = {"name": "Alice", "age": 25, "city": "Beijing"}
print(my_dict) # 输出:{'name': 'Alice', 'age': 25, 'city': 'Beijing'}
- 使用
dict()
构造函数:
my_dict = dict(name="Bob", age=30)
print(my_dict) # 输出:{'name': 'Bob', 'age': 30}
- 空字典:
empty_dict = {}
# 或
empty_dict = dict()
- 嵌套字典:
nested_dict = {
"user1": {"name": "Alice", "age": 25},
"user2": {"name": "Bob", "age": 30}
}
print(nested_dict["user1"]["name"]) # 输出:Alice
2. 访问和修改
- 通过键访问:
my_dict = {"name": "Alice", "age": 25}
print(my_dict["name"]) # 输出:Alice
- 注意:访问不存在的键会抛出
KeyError
。 - 使用
get()
安全访问:
print(my_dict.get("age")) # 输出:25
print(my_dict.get("address", "Unknown")) # 输出:Unknown(默认值)
- 修改值:
my_dict["age"] = 26
print(my_dict) # 输出:{'name': 'Alice', 'age': 26}
- 添加新键值对:
my_dict["city"] = "Shanghai"
print(my_dict) # 输出:{'name': 'Alice', 'age': 26, 'city': 'Shanghai'}
- 删除键值对:
del my_dict["city"]
print(my_dict) # 输出:{'name': 'Alice', 'age': 26}
3. 常用方法
keys()
:返回所有键。
print(my_dict.keys()) # 输出:dict_keys(['name', 'age'])
values()
:返回所有值。
print(my_dict.values()) # 输出:dict_values(['Alice', 26])
items()
:返回键值对元组。
print(my_dict.items()) # 输出:dict_items([('name', 'Alice'), ('age', 26)])
pop(key[, default])
:删除指定键并返回值。
age = my_dict.pop("age")
print(age, my_dict) # 输出:26 {'name': 'Alice'}
update()
:批量更新或添加键值对。
my_dict.update({"age": 27, "city": "Guangzhou"})
print(my_dict) # 输出:{'name': 'Alice', 'age': 27, 'city': 'Guangzhou'}
clear()
:清空字典。
my_dict.clear()
print(my_dict) # 输出:{}
4. 遍历字典
- 遍历键:
for key in my_dict:
print(key, my_dict[key])
# 输出:
# name Alice
# age 27
# city Guangzhou
- 遍历键值对:
for key, value in my_dict.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 27
# city: Guangzhou
5. 字典推导式
squares = {x: x**2 for x in range(5)}
print(squares) # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
6. 性能与内存
- 高效查找:
import time
d = {i: str(i) for i in range(1000000)}
start = time.time()
print(d.get(999999)) # 快速查找
print(f"Time: {time.time() - start:.6f}s") # 输出:微秒级
- 内存占用:
import sys
print(sys.getsizeof({})) # 输出:约 64 字节(空字典)
print(sys.getsizeof(d)) # 输出:约 48MB(100万个键值对)
三、实践示例(综合应用)
- 统计词频:
def word_count(text):
words = text.lower().split()
freq = {}
for word in words:
freq[word] = freq.get(word, 0) + 1
return freq
text = "apple banana apple cherry banana"
print(word_count(text))
# 输出:{'apple': 2, 'banana': 2, 'cherry': 1}
功能:统计文本中每个单词的出现频率。
- 用户配置文件:
def save_config(config):
with open("config.txt", "w") as f:
for key, value in config.items():
f.write(f"{key}={value}\n")
config = {"username": "Alice", "theme": "dark", "lang": "en"}
save_config(config)
功能:将字典配置保存到文件。
- KMP 集成(JSON 数据处理):
import json
def process_for_kmp(data):
result = {}
for i, item in enumerate(data):
result[f"item_{i}"] = {"value": item, "id": i}
return json.dumps(result)
data = [10, 20, 30]
json_data = process_for_kmp(data)
print(json_data)
# 输出:{"item_0": {"value": 10, "id": 0}, "item_1": {"value": 20, "id": 1}, "item_2": {"value": 30, "id": 2}}
功能:将列表转为字典并序列化为 JSON,供 KMP 项目中的 Kotlin 模块使用。
四、注意事项与最佳实践
- 键的限制:
- 键必须是不可变类型:
python # 错误 d = {[1, 2]: "list"} # TypeError: unhashable type: 'list' # 正确 d = {(1, 2): "tuple"} # 元组作为键
- 错误处理:
- 使用
get()
避免KeyError
:python value = my_dict.get("key", "default") # 安全获取
- 检查键存在:
python if "key" in my_dict: print(my_dict["key"])
- 性能优化:
- 避免频繁创建大字典,预估大小:
python d = dict.fromkeys(range(1000), 0) # 预初始化
- 使用字典推导式简化代码:
python d = {k: v**2 for k, v in enumerate(range(5))}
- 跨平台:
- 在 KMP 项目中,字典转为 JSON 与 Kotlin 互操作:
kotlin @CName("processData") fun processData(json: String): String { // 解析 Python 字典的 JSON }
- 使用
json.dumps()
和json.loads()
:python import json d = {"name": "Alice"} json_str = json.dumps(d)
- 2025年趋势:
- Python 3.13:优化字典的哈希表实现,查找更快。
- 数据科学:结合
pandas
处理字典格式数据:python import pandas as pd df = pd.DataFrame([{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}])
- AI 辅助:PyCharm 的 Copilot 可生成字典操作代码。
五、学习建议
- 练习:用字典实现词频统计或配置文件管理,测试嵌套和推导式。
- 资源:
- 官方文档:https://docs.python.org/3/library/stdtypes.html#dict
- CSDN:搜索“Python 字典”。
- B站:Python 教程(如“尚硅谷 Python”)。
- 时间:1-2 天掌握基本操作,1 周熟悉复杂场景。
- 实践:开发词频统计工具或 JSON 数据处理器。
六、总结
Python 字典必知键值对存储和高效查找,必会创建、访问、修改和遍历操作。2025年,字典在 Python 开发和 KMP 项目中不可或缺,结合 Python 3.13 优化更高效。相比列表,字典以键访问更灵活,适合映射场景。
如果需要具体场景代码(如复杂数据处理或 KMP 示例)或有问题,告诉我,我可以提供更详细解答!