当前位置:首页>python>Python字典——键值对的存储结构

Python字典——键值对的存储结构

  • 2026-09-15 09:54:39
Python字典——键值对的存储结构

一、什么是字典?

字典(dictionary) 是 Python 中一种非常强大的数据结构,用于存储键值对(key-value pairs)。每个键都与一个值相关联,可以通过键来快速访问对应的值,类似于现实生活中的字典:通过词条(键)查找释义(值)。

# 字典示例person = {"name": "张三", "age": 25, "city": "北京"}print(person["name"])  # 输出:张三

二、字典的特点

  • • 键值对:每个元素由键和值组成,用冒号 : 分隔。
  • • 键唯一:字典中的键不能重复,如果重复赋值,后面的值会覆盖前面的。
  • • 键必须不可变:键可以是数字、字符串、元组等不可变类型,但不能是列表或字典(可变类型)。
  • • 值可以是任意类型:值可以是数字、字符串、列表、字典甚至自定义对象。
  • • 无序性(但有序):在 Python 3.6 之前,字典是无序的;从 3.7 开始,字典会保持插入顺序,但通常我们仍将字典视为无序的键值对集合(因为访问时不依赖顺序)。
  • • 可变:可以动态添加、修改、删除键值对。
  • • 高效:字典的查找速度非常快(基于哈希表实现)。

三、创建字典

3.1 使用花括号 {}

最常见的方式是用花括号括起一系列用逗号分隔的键值对,每个键值对格式为 键: 值。

# 空字典empty_dict = {}# 包含多个键值对的字典student = {"name": "李四","age": 20,"major": "计算机科学"}print(student)

3.2 使用 dict() 构造函数

dict() 函数可以通过多种方式创建字典。

方式1:传入关键字参数

person = dict(name="王五", age=30, city="上海")print(person)  # {'name': '王五', 'age': 30, 'city': '上海'}

注意:这种方式下,键名必须是合法的标识符(不能是数字、带空格等)。

方式2:传入包含键值对的元组/列表

# 传入包含键值对元组的列表items = [("name", "赵六"), ("age", 28), ("city", "广州")]person = dict(items)print(person)  # {'name': '赵六', 'age': 28, 'city': '广州'}# 也可以传入键值对的元组列表,或者使用 zipkeys = ["name", "age", "city"]values = ["小明", 18, "深圳"]person = dict(zip(keys, values))print(person)  # {'name': '小明', 'age': 18, 'city': '深圳'}

方式3:使用字典推导式(后续会详细介绍,这里只作简单示例)

# 生成数字平方字典squares = {x: x**2for x inrange(5)}print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

3.3 使用 fromkeys() 方法

dict.fromkeys(seq, value) 用于创建一个新字典,以序列 seq 中的元素作为键,所有键对应的值相同(默认为 None)。

# 所有键的值默认为 Nonekeys = ["a", "b", "c"]d = dict.fromkeys(keys)print(d)  # {'a': None, 'b': None, 'c': None}# 指定默认值d = dict.fromkeys(keys, 0)print(d)  # {'a': 0, 'b': 0, 'c': 0}

注意: 如果默认值是可变对象(如列表),所有键将共享同一个对象,修改一个会影响到所有键,需谨慎。


四、访问字典元素

4.1 通过键直接访问 字典[键]

使用方括号加键名即可获取对应的值。如果键不存在,会抛出 KeyError。

student = {"name": "小红", "age": 19, "score": 95}print(student["name"])   # 小红print(student["age"])    # 19# print(student["gender"])  # KeyError: 'gender'

4.2 使用 get() 方法安全访问

get(key[, default]) 方法在键存在时返回对应的值,不存在时返回 default(默认 None),不会抛出异常。

student = {"name": "小红", "age": 19, "score": 95}print(student.get("name"))          # 小红print(student.get("gender"))        # Noneprint(student.get("gender", "未知")) # 未知(指定默认值)

4.3 检查键是否存在 —— in 运算符

在访问前可以使用 in 或 not in 检查字典中是否包含某个键。

student = {"name": "小红", "age": 19}if"name"in student:print("存在 name 键")if"gender"notin student:print("不存在 gender 键")

4.4 获取所有键、值、键值对

  • • keys() 返回所有键的视图(类似集合,支持迭代)。
  • • values() 返回所有值的视图。
  • • items() 返回所有键值对的视图,每个元素是一个元组 (键, 值)。
student = {"name": "小明", "age": 20, "city": "北京"}print(student.keys())    # dict_keys(['name', 'age', 'city'])print(student.values())  # dict_values(['小明', 20, '北京'])print(student.items())   # dict_items([('name', '小明'), ('age', 20), ('city', '北京')])# 可以转换为列表keys_list = list(student.keys())print(keys_list)         # ['name', 'age', 'city']

4.5 遍历字典

通常使用 for 循环遍历字典,可以直接遍历键,或遍历 items() 同时获取键和值。

student = {"name": "小刚", "age": 22, "score": 88}# 遍历键for key in student:print(f"{key}: {student[key]}")# 遍历键值对for key, value in student.items():print(f"{key}: {value}")

4.6 访问嵌套字典的值

如果字典的值也是字典(嵌套字典),可以使用连续的中括号访问。

users = {"user1": {"name": "张三", "age": 25},"user2": {"name": "李四", "age": 30}}print(users["user1"]["name"])  # 张三

五、常用操作速览

操作
语法
示例
创建空字典
d = {}
 或 d = dict()
添加/修改键值对
d[键] = 值d["name"] = "Tom"
获取值
d[键]
 或 d.get(键)
删除键值对
del d[键]del d["age"]
删除并返回
d.pop(键[, 默认])age = d.pop("age")
清空字典
d.clear()
合并字典
d1.update(d2)d1.update({"a":1})
获取所有键
d.keys()
获取所有值
d.values()
获取所有项
d.items()
检查键存在
键 in d
长度
len(d)

六、注意事项

  1. 1. 键必须是不可变类型:如整数、浮点数、字符串、元组。列表、字典等可变类型不能作为键。
  2. 2. 键不能重复:如果重复赋值,后面的值会覆盖前面的。
  3. 3. 访问不存在的键:用 d[键] 会引发 KeyError,推荐使用 d.get(键) 避免异常。
  4. 4. 字典视图动态性:keys()、values()、items() 返回的视图会随字典变化而变化,且支持集合运算(对 keys() 和 items())。
  5. 5. Python 3.7+ 字典保持插入顺序:虽然可以作为特性使用,但不应依赖顺序进行逻辑判断(除非明确需要)。

七、实战案例

案例1:学生信息管理系统

# 存储多个学生信息students = {}whileTrue:print("\n1. 添加学生")print("2. 查询学生")print("3. 显示所有学生")print("0. 退出")    choice = input("请选择:")if choice == '1':        sid = input("学号:")        name = input("姓名:")        age = input("年龄:")        students[sid] = {"name": name, "age": age}print("添加成功")elif choice == '2':        sid = input("学号:")if sid in students:            info = students[sid]print(f"姓名:{info['name']},年龄:{info['age']}")else:print("学号不存在")elif choice == '3':for sid, info in students.items():print(f"{sid}: {info['name']},{info['age']}岁")elif choice == '0':break

案例2:统计字符出现次数

text = "hello world"char_count = {}for ch in text:if ch != ' ':        char_count[ch] = char_count.get(ch, 0) + 1print(char_count)  # {'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1}

案例3:使用字典映射执行不同操作(替代 if-elif)

defadd(a, b):return a + bdefsubtract(a, b):return a - bdefmultiply(a, b):return a * boperations = {'+': add,'-': subtract,'*': multiply}a, b = 10, 5for op in operations:    result = operations[op](a, b)print(f"{a}{op}{b} = {result}")

八、总结

  • • 字典 是键值对的无序(但有序)集合,键唯一且不可变。
  • • 创建方式:{}、dict()、fromkeys()、字典推导式。
  • • 访问元素:d[键](可能引发异常)和 d.get(键, 默认值)(安全)。
  • • 常用方法:keys()、values()、items()、update()、pop() 等。
  • • 适合快速查找、映射关系、计数等场景。

掌握字典是 Python 编程的基本功,它能让你以键值对的方式组织数据,代码更清晰高效。

最新文章

随机文章