Python 字典(dict)
字典是 Python 中的一个强大的数据结构,用来存储键值对(key-value pairs)。它类似于现实中的字典,通过“键”快速查找对应的“值”。字典特别适合用于描述事物的属性、进行数据映射等场景。
1. 什么是字典?
特点:
- 键值对存储:每个元素由一个**键(key)和一个值(value)**组成。
- 键唯一:字典中的键不能重复,值可以重复。
- 无序性:从 Python 3.7 开始,字典按照插入顺序存储,但无法通过索引访问。
- 可变性:可以动态添加、修改或删除键值对。
定义: 用花括号
{}
包含多个键值对,键和值用冒号:
分隔,多个键值对之间用逗号,
分隔。
示例:定义字典
# 定义一个字典
person = {"姓名": "张三", "年龄": 25, "职业": "程序员"}
# 空字典
empty_dict = {}
# 用 dict() 创建字典
person2 = dict(姓名="李四", 年龄=30, 职业="设计师")
2. 字典的基本操作
1) 访问字典中的值
- 使用键(key)访问对应的值。
- 如果键不存在,会抛出
KeyError
异常。
person = {"姓名": "张三", "年龄": 25}
# 通过键访问值
print(person["姓名"]) # 输出:张三
# 如果键不存在
# print(person["地址"]) # 抛出 KeyError
- 推荐方式:使用
get()
方法:- 如果键不存在,返回
None
或指定的默认值。
- 如果键不存在,返回
print(person.get("地址")) # 输出:None
print(person.get("地址", "未知")) # 输出:未知
2) 添加或修改键值对
- 添加:直接使用新键赋值即可。
- 修改:使用已有键重新赋值。
person = {"姓名": "张三", "年龄": 25}
# 添加键值对
person["地址"] = "北京"
print(person) # 输出:{'姓名': '张三', '年龄': 25, '地址': '北京'}
# 修改键值对
person["年龄"] = 26
print(person) # 输出:{'姓名': '张三', '年龄': 26, '地址': '北京'}
3) 删除键值对
- 使用
del
删除指定键值对。 - 使用
pop()
方法返回并删除指定键的值。 - 使用
clear()
清空字典。
person = {"姓名": "张三", "年龄": 25, "地址": "北京"}
# 删除某个键值对
del person["地址"]
print(person) # 输出:{'姓名': '张三', '年龄': 25}
# 使用 pop() 方法
age = person.pop("年龄")
print(age) # 输出:25
print(person) # 输出:{'姓名': '张三'}
# 清空字典
person.clear()
print(person) # 输出:{}
3. 字典的遍历
字典支持遍历键、值以及键值对。
person = {"姓名": "张三", "年龄": 25, "职业": "程序员"}
# 遍历键
for key in person:
print(key) # 输出:姓名 年龄 职业
# 遍历值
for value in person.values():
print(value) # 输出:张三 25 程序员
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
# 输出:
# 姓名: 张三
# 年龄: 25
# 职业: 程序员
4. 常用内置方法
方法 | 描述 | 示例 |
---|---|---|
get(key[, default]) |
返回键对应的值,键不存在时返回默认值 | person.get("地址", "未知") |
keys() |
返回所有键,类型为 dict_keys |
person.keys() |
values() |
返回所有值,类型为 dict_values |
person.values() |
items() |
返回所有键值对,类型为 dict_items |
person.items() |
pop(key[, default]) |
删除并返回键对应的值,键不存在返回默认值 | person.pop("年龄", 0) |
update(other_dict) |
合并另一个字典,将其键值对加入当前字典 | person.update({"地址": "上海"}) |
clear() |
清空字典 | person.clear() |
copy() |
返回字典的浅拷贝 | new_dict = person.copy() |
5. 嵌套字典
字典可以嵌套字典,适合用来描述复杂的结构。
students = {
"001": {"姓名": "张三", "年龄": 18, "成绩": {"语文": 90, "数学": 95}},
"002": {"姓名": "李四", "年龄": 19, "成绩": {"语文": 85, "数学": 92}},
}
# 访问嵌套数据
print(students["001"]["成绩"]["数学"]) # 输出:95
6. 字典的应用场景
存储结构化数据:如用户信息、配置文件等。
config = {"host": "localhost", "port": 3306, "debug": True}
计数器:统计元素出现的次数。
text = "hello world" counter = {} for char in text: counter[char] = counter.get(char, 0) + 1 print(counter) # 输出:{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
快速查找:通过键高效查找对应的值。
phone_book = {"张三": "123456", "李四": "789101"} print(phone_book.get("张三")) # 输出:123456
7. 注意事项
键必须是不可变对象:
- 常用类型:字符串、数字、元组。
- 错误示例:
{[1, 2]: "值"}
会报错,因为列表是可变对象。
键的唯一性:
- 如果新键与现有键重复,后者会覆盖前者。
data = {"a": 1, "a": 2} print(data) # 输出:{'a': 2}
8. 总结
- 字典是 Python 中功能强大的数据结构,用于存储键值对。
- 通过掌握字典的基本操作、方法和实际应用,可以高效解决数据映射、快速查找等问题,是日常编程中不可或缺的工具。