在 Python 编程中,键值对(Key-Value Pair)是一种高效的数据组织形式,它通过 “唯一标识(键)” 与 “对应数据(值)” 的映射关系,实现数据的快速存储、查询和修改。Python 中最核心的键值对数据结构是字典(dict),此外还有 collections 模块提供的 defaultdict、OrderedDict 等扩展类型,它们共同构成了处理键值对数据的核心工具集。
一、键值对的核心概念
1. 定义与本质
键值对本质是 “映射关系”,类似现实中的 “通讯录”——“姓名” 是唯一的键(Key),“电话号码” 是对应的值(Value),通过姓名能快速找到电话号码,无需遍历所有联系人。
在 Python 中,键值对的核心规则如下:
- 键(Key):必须是不可变类型(如
int、str、tuple),且在同一个键值对集合中必须唯一(重复赋值会覆盖旧值)。 - 值(Value):可以是任意类型(如
int、list、dict甚至自定义对象),无需唯一。 - 映射关系:一个键只能对应一个值,但多个键可以对应同一个值(如两个不同姓名对应同一个电话号码)。
2. 与其他数据结构的区别
为了更清晰理解键值对的定位,可将其与 Python 中常见的序列类型(如列表 list)对比:
| 特性 | 键值对(如 dict) | 序列(如 list) |
|---|---|---|
| 数据访问方式 | 通过 “键” 查询(随机访问) | 通过 “索引” 查询(顺序访问) |
| 元素唯一性要求 | 键必须唯一,值可重复 | 元素(值)可重复 |
| 数据有序性(Python 3.7+) | dict 有序,OrderedDict 强制有序 | 天生有序 |
| 查询效率 | 极高(平均时间复杂度 O (1)) | 随数据量增长变慢(O (n)) |
二、Python 核心键值对结构:字典(dict)
字典是 Python 内置的、最常用的键值对容器,其语法简洁,操作高效,是处理配置、缓存、关联数据的首选工具。
1. 字典的创建
字典的创建有多种方式,可根据场景选择最便捷的形式:
(1)字面量创建(最常用)
用大括号 {} 包裹键值对,键与值之间用冒号 : 分隔,不同键值对用逗号 , 分隔:
# 基础键值对:字符串键 + 整数/字符串值
student = {
"name": "Alice", "age": 20, "major": "Computer Science"}
# 特殊键类型:整数键、元组键(不可变类型)
config = {
1: "debug", (192, 168, 1, 1): "server_ip"}
# 空字典
empty_dict = {
}
(2)dict() 构造函数创建
适合从其他数据类型(如列表、元组)转换为字典:
# 从“键值对元组列表”创建
user = dict([("username", "bob123"), ("password", "abc123")])
# 从“关键字参数”创建(键必须是合法标识符,无需引号)
product = dict(name="Laptop", price=5999, stock=100)
# 从“两个列表”创建(用 zip() 配对键和值)
keys = ["a", "b", "c"]
values = [1, 2, 3]
my_dict = dict(zip(keys, values)) # 结果:{"a":1, "b":2, "c":3}
(3)字典推导式(高效创建)
类似列表推导式,通过循环和条件快速生成字典,语法简洁且执行高效:
# 生成“数字-平方”键值对(1-5的平方)
square_dict = {
x: x**2 for x in range(1, 6)}
# 结果:{1:1, 2:4, 3:9, 4:16, 5:25}
# 带条件的推导式:筛选偶数的平方
even_square = {
x: x**2 for x in range(1, 11) if x % 2 == 0}
# 结果:{2:4, 4:16, 6:36, 8:64, 10:100}
# 从现有字典筛选数据:保留值大于20的键值对
old_dict = {
"a": 15, "b": 25, "c": 30}
new_dict = {
k: v for k, v in old_dict.items() if v > 20}
# 结果:{"b":25, "c":30}
2. 字典的核心操作
字典的操作围绕 “键” 展开,包括访问值、添加 / 修改键值对、删除键值对、判断键是否存在等,所有操作的时间复杂度均为 O (1)(平均情况)。
(1)访问值:通过键获取值
有两种常用方式,区别在于 “键不存在时的处理”:
- 直接访问(
dict[key]):若键不存在,会抛出KeyError异常,适合确定键存在的场景。 get()方法:若键不存在,返回默认值(默认None),不会报错,适合不确定键是否存在的场景。
student = {
"name": "Alice", "age": 20, "major": "CS"}
# 1. 直接访问
print(student["name"]) # 输出:Alice
# print(student["gender"]) # 报错:KeyError: 'gender'
# 2. get() 方法
print(student.get("age")) # 输出:20
print(student.get("gender", "Unknown")) # 输出:Unknown(键不存在,返回默认值)
(2)添加 / 修改键值对
字典是可变类型,可直接通过键赋值实现 “添加” 或 “修改”:
- 若键已存在:赋值会覆盖旧值(修改操作)。
- 若键不存在:赋值会新增键值对(添加操作)。
student =

3299

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



