Python字典操作详解与实战
1. 字典的核心概念
字典是Python中极为重要的映射型数据结构,采用键值对(key-value)的形式存储数据。其结构特征如下:
- 整体封装于花括号
{}之中 - 键与值通过冒号
:分隔 - 多个键值对之间以逗号
,隔开
键具有唯一性与不可变性,通常选用字符串或数值;值则可以是任意数据类型,灵活度很高。
2. 创建字典的多种途径
# 方式一:直接赋值
user_info = {"username": "alice", "level": 5, "active": True}
# 方式二:使用构造函数
config = dict(host="localhost", port=3306)
# 方式三:从序列构建
pairs = [("x", 100), ("y", 200)]
coords = dict(pairs)
# 空字典
empty = {}
another_empty = dict()
3. 值的获取与访问
通过键来索引是最直接的访问方式,此外还可以使用 get() 方法提供默认值:
profile = {"name": "Bob", "age": 25, "dept": "Engineering"}
# 直接索引
print(profile["name"]) # Bob
# 安全访问,避免KeyError
print(profile.get("salary", "未设置")) # 未设置
# 检查键是否存在
if "age" in profile:
print(f"年龄: {profile['age']}")
4. 修改与扩充字典
字典是可变对象,支持动态增删改:
scores = {"math": 90, "english": 85}
# 更新已有键
scores["math"] = 95
# 添加新键值对
scores["physics"] = 88
# 批量合并
extra = {"chemistry": 92, "biology": 87}
scores.update(extra)
5. 移除元素的几种方式
| 操作 | 作用 | 返回值 |
|---|---|---|
del d[key] | 删除指定键值对 | 无 |
d.pop(key) | 删除并返回指定键的值 | 对应的值 |
d.popitem() | 移除并返回最后插入的项 | (key, value)元组 |
d.clear() | 清空全部内容 | None |
cache = {"token": "abc123", "expires": 3600, "user": "admin"}
# 移除指定项并获取值
expired = cache.pop("expires")
# 移除最近添加的项
last_item = cache.popitem()
# 彻底清空
cache.clear()
6. 遍历与视图对象
Python 3中,keys()、values()、items() 返回的是动态视图,能反映字典的实时变化:
product = {"id": "A-001", "price": 299.00, "stock": 500}
# 遍历所有键
for k in product.keys():
print(k)
# 遍历所有值
for v in product.values():
print(v)
# 同时遍历键和值
for attr, val in product.items():
print(f"{attr}: {val}")
7. 实用技巧:字典推导式
利用推导式可以快速生成字典,语法简洁高效:
# 将列表转为索引字典
names = ["apple", "banana", "cherry"]
index_map = {name: idx for idx, name in enumerate(names)}
# 过滤并转换
prices = {"apple": 5, "banana": 3, "grape": 8}
discounted = {k: v * 0.9 for k, v in prices.items() if v > 4}
# 从两个列表构建字典
fields = ["name", "age", "city"]
values = ["Charlie", 30, "Shanghai"]
record = dict(zip(fields, values))
8. 嵌套结构与深度访问
字典的值可以是另一个字典,形成层级结构:
company = {
"dept_sales": {
"manager": "Sarah",
"members": ["Tom", "Jerry"],
"budget": 500000
},
"dept_tech": {
"manager": "Mike",
"members": ["Anna", "David", "Eve"],
"budget": 800000
}
}
# 访问嵌套数据
print(company["dept_tech"]["manager"])
company["dept_sales"]["members"].append("Lily")
9. 内置函数速查
| 函数/方法 | 说明 |
|---|---|
len(d) | 返回键值对数量 |
max(d) / min(d) | 返回最大/最小键 |
sorted(d) | 返回排序后的键列表 |
d.setdefault(k, v) | 键不存在时设置默认值 |
d.copy() | 浅拷贝字典 |
d.fromkeys(seq, val) | 以序列元素为键创建新字典 |