Python 字典(dict)

字典是 Python 中的一个强大的数据结构,用来存储键值对(key-value pairs)。它类似于现实中的字典,通过“键”快速查找对应的“值”。字典特别适合用于描述事物的属性、进行数据映射等场景。


1. 什么是字典?

  • 特点

    1. 键值对存储:每个元素由一个**键(key)和一个值(value)**组成。
    2. 键唯一:字典中的键不能重复,值可以重复。
    3. 无序性:从 Python 3.7 开始,字典按照插入顺序存储,但无法通过索引访问。
    4. 可变性:可以动态添加、修改或删除键值对。
  • 定义: 用花括号 {} 包含多个键值对,键和值用冒号 : 分隔,多个键值对之间用逗号 , 分隔。

示例:定义字典

# 定义一个字典
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. 字典的应用场景

  1. 存储结构化数据:如用户信息、配置文件等。

    config = {"host": "localhost", "port": 3306, "debug": True}
    
  2. 计数器:统计元素出现的次数。

    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}
    
  3. 快速查找:通过键高效查找对应的值。

    phone_book = {"张三": "123456", "李四": "789101"}
    print(phone_book.get("张三"))  # 输出:123456
    

7. 注意事项

  1. 键必须是不可变对象

    • 常用类型:字符串、数字、元组。
    • 错误示例:{[1, 2]: "值"} 会报错,因为列表是可变对象。
  2. 键的唯一性

    • 如果新键与现有键重复,后者会覆盖前者。
    data = {"a": 1, "a": 2}
    print(data)  # 输出:{'a': 2}
    

8. 总结

  • 字典是 Python 中功能强大的数据结构,用于存储键值对。
  • 通过掌握字典的基本操作、方法和实际应用,可以高效解决数据映射、快速查找等问题,是日常编程中不可或缺的工具。