在 Python 中,dict(字典)是一种内置数据类型,用于存储键值对(key-value pairs)的集合。字典是可变的(可以动态增删改)、无序的(Python 3.7+ 开始保留插入顺序),并通过键(key)快速访问值(value),是 Python 中最高效的映射类型之一。
字典的核心特性
-
键值对结构
每个元素由key: value组成,键和值之间用冒号分隔,元素之间用逗号分隔。my_dict = {"name": "Alice", "age": 30, "city": "New York"} -
键的唯一性
键(key)必须是不可变类型(如字符串、数字、元组),且不能重复。若重复,后定义的键会覆盖之前的键。# 键重复时,保留最后一个值 data = {"a": 1, "b": 2, "a": 3} print(data) # 输出: {'a': 3, 'b': 2} -
值的任意性
值(value)可以是任意数据类型(数字、字符串、列表、其他字典等)。nested_dict = { "user": {"name": "Bob", "age": 25}, "scores": [85, 90, 78] } -
高效查找
字典基于哈希表(Hash Table)实现,通过键的哈希值快速定位对应的值,查询时间复杂度为 O(1)。
字典的创建方式
-
直接定义
使用花括号{}和键值对:person = {"name": "Charlie", "age": 28} -
dict()构造函数
从键值对序列或关键字参数创建:# 从键值对列表创建 d1 = dict([("a", 1), ("b", 2)]) # {'a': 1, 'b': 2} # 从关键字参数创建 d2 = dict(name="Dave", age=35) # {'name': 'Dave', 'age': 35} -
字典推导式
类似于列表推导式:squares = {x: x**2 for x in range(5)} # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
字典的常用操作
1. 访问元素
- 通过键直接访问:
print(person["name"]) # 输出: Charlie - 使用
get(key, default)方法(避免 KeyError):print(person.get("gender", "Unknown")) # 如果键不存在,返回默认值
2. 添加/修改元素
- 直接赋值:
person["gender"] = "Male" # 添加新键值对 person["age"] = 29 # 修改已有键的值
3. 删除元素
del语句:del person["city"] # 删除键为 "city" 的项pop(key, default)方法:age = person.pop("age") # 删除并返回 "age" 对应的值 gender = person.pop("gender", "N/A") # 若键不存在,返回默认值
4. 遍历字典
- 遍历所有键:
for key in person: print(key) - 遍历所有键值对:
for key, value in person.items(): print(f"{key}: {value}")
5. 其他常用方法
| 方法 | 说明 |
|---|---|
keys() | 返回所有键的视图(类似列表) |
values() | 返回所有值的视图 |
items() | 返回所有键值对的视图 |
update(new_dict) | 合并另一个字典到当前字典 |
clear() | 清空字典 |
字典的典型应用场景
-
快速查找数据
例如通过用户 ID 查找用户信息:users = { 101: {"name": "Alice", "role": "admin"}, 102: {"name": "Bob", "role": "user"} } print(users[101]["name"]) # 输出: Alice -
配置管理
存储程序的配置参数:config = { "host": "localhost", "port": 8080, "debug": True } -
数据统计
统计词频或分组数据:text = "apple banana apple orange banana" words = text.split() frequency = {} for word in words: frequency[word] = frequency.get(word, 0) + 1 # 输出: {'apple': 2, 'banana': 2, 'orange': 1}
注意事项
-
键必须是不可变类型
若尝试使用列表等可变类型作为键,会抛出TypeError:invalid_dict = {["a", "b"]: 1} # 报错! -
避免直接修改遍历中的字典
遍历时增删元素可能导致意外行为,建议先复制键的列表:for key in list(person.keys()): if key == "age": del person[key] -
Python 3.7+ 保留插入顺序
早期版本中字典是无序的,但在现代 Python 版本中,遍历顺序与插入顺序一致。
字典是 Python 中最灵活和高效的数据结构之一,熟练掌握其用法可以显著提升代码的简洁性和性能。
Python字典dict的作用与用法
12万+

被折叠的 条评论
为什么被折叠?



