Python 字典(Dict)的常用方式
·
十分想念顺店杂可。。。
Python 字典(Dictionary)是一种键值对(key-value) 形式的无序数据结构(Python 3.7+ 后保证插入顺序),用于存储具有关联关系的数据。字典用大括号 {} 表示,键(key)必须是不可变类型(如字符串、数字、元组),且唯一;值(value)可以是任意类型(字符串、数字、列表、字典等)。
一、字典的创建
常用的创建字典方式有以下几种:
1. 直接用 {} 定义
# 基本形式:{key1: value1, key2: value2, ...}
person = {
"name": "Alice",
"age": 25,
"is_student": False,
"hobbies": ["reading", "hiking"] # 值可以是列表
}
print(person) # 输出:{'name': 'Alice', 'age': 25, 'is_student': False, 'hobbies': ['reading', 'hiking']}
2. 用 dict() 函数创建
# 方式1:通过键值对参数
person = dict(name="Bob", age=30, is_student=True)
print(person) # 输出:{'name': 'Bob', 'age': 30, 'is_student': True}
# 方式2:通过包含键值对的可迭代对象(如列表)
items = [("name", "Charlie"), ("age", 28)]
person = dict(items)
print(person) # 输出:{'name': 'Charlie', 'age': 28}
3. 字典推导式(快速生成字典)
类似列表推导式,通过表达式快速生成字典:
# 生成 {0:0, 1:1, 2:4, 3:9}(键为0-3,值为键的平方)
squares = {i: i**2 for i in range(4)}
print(squares) # 输出:{0: 0, 1: 1, 2: 4, 3: 9}
# 过滤偶数键
even_squares = {i: i**2 for i in range(10) if i % 2 == 0}
print(even_squares) # 输出:{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
二、访问字典元素
通过键(key) 访问对应的值(value),常用两种方式:
1. 直接用 dict[key] 访问
person = {"name": "Alice", "age": 25}
print(person["name"]) # 输出:Alice
print(person["age"]) # 输出:25
⚠️ 注意:如果访问的键不存在,会直接报错 KeyError:
print(person["gender"]) # 报错:KeyError: 'gender'
2. 用 get(key, default) 方法访问(更安全)
get() 方法会在键不存在时返回默认值(默认值可选,不填则返回 None),避免报错:
person = {"name": "Alice", "age": 25}
print(person.get("name")) # 输出:Alice
print(person.get("gender")) # 输出:None(键不存在,无默认值)
print(person.get("gender", "未知")) # 输出:未知(键不存在,返回指定默认值)
三、修改与添加元素
字典是可变类型,可以直接通过键修改已有值,或添加新的键值对:
1. 修改已有元素
person = {"name": "Alice", "age": 25}
person["age"] = 26 # 修改"age"的值
print(person) # 输出:{'name': 'Alice', 'age': 26}
2. 添加新元素
person = {"name": "Alice", "age": 25}
person["gender"] = "female" # 添加新键"gender"
person["hobbies"] = ["reading"] # 添加新键"hobbies"
print(person) # 输出:{'name': 'Alice', 'age': 25, 'gender': 'female', 'hobbies': ['reading']}
四、删除字典元素
常用的删除方式有以下几种:
1. del dict[key]:删除指定键值对
person = {"name": "Alice", "age": 25, "gender": "female"}
del person["gender"] # 删除"gender"键值对
print(person) # 输出:{'name': 'Alice', 'age': 25}
2. pop(key, default):删除并返回指定键的值
person = {"name": "Alice", "age": 25}
age = person.pop("age") # 删除"age"并返回其值
print(age) # 输出:25
print(person) # 输出:{'name': 'Alice'}
# 键不存在时返回默认值(避免报错)
gender = person.pop("gender", "未知")
print(gender) # 输出:未知
3. popitem():删除并返回最后插入的键值对(Python 3.7+)
person = {"name": "Alice", "age": 25, "gender": "female"}
last_item = person.popitem() # 删除最后插入的键值对("gender": "female")
print(last_item) # 输出:('gender', 'female')
print(person) # 输出:{'name': 'Alice', 'age': 25}
4. clear():清空字典所有元素
person = {"name": "Alice", "age": 25}
person.clear() # 清空字典
print(person) # 输出:{}
五、字典常用方法
除了上述操作,字典还有一些高频使用的方法:
| 方法 | 作用 |
|---|---|
keys() |
返回所有键的视图(类似列表,可迭代) |
values() |
返回所有值的视图 |
items() |
返回所有键值对的视图(每个元素是 (key, value) 元组) |
update(other) |
用另一个字典 / 可迭代对象的键值对更新当前字典(存在的键会被覆盖) |
copy() |
复制字典(浅拷贝) |
1. keys()、values()、items()(获取字典内容)
person = {"name": "Alice", "age": 25, "gender": "female"}
# 获取所有键
print(list(person.keys())) # 输出:['name', 'age', 'gender'](转换为列表)
# 获取所有值
print(list(person.values())) # 输出:['Alice', 25, 'female']
# 获取所有键值对
print(list(person.items())) # 输出:[('name', 'Alice'), ('age', 25), ('gender', 'female')]
2. update()(合并 / 更新字典)
person = {"name": "Alice", "age": 25}
other_info = {"gender": "female", "age": 26} # "age"会覆盖原字典的值
person.update(other_info)
print(person) # 输出:{'name': 'Alice', 'age': 26, 'gender': 'female'}
# 也可以直接传键值对参数
person.update(city="Beijing", hobby="reading")
print(person) # 输出:{'name': 'Alice', 'age': 26, 'gender': 'female', 'city': 'Beijing', 'hobby': 'reading'}
3. copy()(复制字典)
person = {"name": "Alice", "age": 25}
person_copy = person.copy() # 复制字典
person_copy["age"] = 26 # 修改副本,不影响原字典
print(person) # 输出:{'name': 'Alice', 'age': 25}
print(person_copy) # 输出:{'name': 'Alice', 'age': 26}
⚠️ 注意:copy() 是浅拷贝,如果值是可变类型(如列表、字典),修改副本中的值会影响原字典。如需深拷贝(完全独立),需使用 copy 模块的 deepcopy():
import copy
person = {"name": "Alice", "hobbies": ["reading"]}
person_deepcopy = copy.deepcopy(person)
person_deepcopy["hobbies"].append("hiking") # 修改副本的列表
print(person["hobbies"]) # 输出:['reading'](原字典不受影响)
print(person_deepcopy["hobbies"]) # 输出:['reading', 'hiking']
六、遍历字典
通过 for 循环遍历字典的键、值或键值对:
1. 遍历键(默认遍历键)
person = {"name": "Alice", "age": 25, "gender": "female"}
for key in person:
print(key)
# 输出:
# name
# age
# gender
2. 遍历值(结合 values())
for value in person.values():
print(value)
# 输出:
# Alice
# 25
# female
3. 遍历键值对(结合 items())
for key, value in person.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 25
# gender: female
七、字典嵌套
字典的值可以是另一个字典,形成嵌套结构,常用于表示复杂数据:
# 嵌套字典:存储多个用户信息
users = {
"user1": {
"name": "Alice",
"age": 25,
"address": {"city": "Beijing", "street": "Main St"}
},
"user2": {
"name": "Bob",
"age": 30,
"address": {"city": "Shanghai", "street": "Second St"}
}
}
# 访问嵌套字典的值
print(users["user1"]["name"]) # 输出:Alice
print(users["user2"]["address"]["city"]) # 输出:Shanghai
总结
字典是 Python 中最常用的数据结构之一,核心特点是键值对映射,适用于存储具有关联关系的数据(如用户信息、配置参数、统计数据等)。掌握字典的创建、访问、修改、删除及常用方法,能极大提高数据处理效率。
关键注意点:
- 键必须是不可变类型且唯一;
- 访问不存在的键时,优先用
get()方法避免报错; - 遍历字典时,根据需求选择
keys()、values()或items(); - 嵌套字典和字典推导式是处理复杂数据的高效工具。
更多推荐
所有评论(0)