十分想念顺店杂可。。。

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()
  • 嵌套字典和字典推导式是处理复杂数据的高效工具。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐