Python基础 : 字典(Dict)
文章目录
一、知识点详解
1.1 字典定义
- 字典是一种
可变的
数据结构,用于存储键值对(key - value)。 - 键和值用
:
连接,不同键值对用,
分隔。 - 键必须是
不可变类型
(数字、字符串、元组)。 - 值可以是
任意类型
,甚至是另一个字典。 - 字典的
无序性:- Python 3.6及之前, 字典是
无序的
,遍历顺序与插入顺序无关,由哈希值决定 - Python 3.7+, 正式规定字典
按插入顺序输出
- 注意 : 有序性仅指保留插入顺序,与键值
排序
无关。若需排序,仍需使用sorted()
。
- Python 3.6及之前, 字典是
1.2 创建字典
# 创建空字典
empty_dict1 = {} # 推荐:简洁高效
empty_dict2 = dict() # 适用于动态创建场景
# 创建包含数据的字典
# 方式1:直接字面量(最简洁直观)
my_cat = {
"name": "咪咪",
"age": 2,
"hobbies": ["睡觉", "吃鱼"] # 值可以是任意类型
}
# 方式2:dict()构造函数(灵活多变)
# 关键字参数(键必须是合法标识符)
person = dict(name="小明", age=18, gender="男")
# 元组列表(适合动态生成数据)
items = [("apple", 5), ("banana", 3), ("orange", 4)]
fruits = dict(items)
# zip()函数(键值分别来自两个列表)
keys = ["城市", "邮编"]
values = ["北京", "100000"]
address = dict(zip(keys, values))
# 方式3: fromkeys()方法(批量生成相同值的键)
default_user = dict.fromkeys(["name", "age", "email"], "未设置")
print(default_user) # 输出: {'name': '未设置', 'age': '未设置', 'email': '未设置'}
# 默认值可省略
default_user = dict.fromkeys(["name", "age", "email"])
print(default_user) # 输出: {'name': None, 'age': None, 'email': None}
# 注意:fromkeys()的陷阱 - 值是引用类型(如列表、字典、集合等可变对象)时
shared_list = dict.fromkeys(["a", "b"], [])
shared_list["a"].append(1)
print(shared_list) # 输出: {'a': [1], 'b': [1]} 所有值共享同一个列表!
1.3 访问字典数据
-
基本访问
# 键不存在时, 会报错KeyError print(my_cat["name"]) # 输出:咪咪
错误案例:
print(my_cat["weight"]) # 报错KeyError
-
避免报错的安全访问
# 当键不存在时,get()不会报错 # dict.get(键, 默认值) # 若要访问的键不存在,返回预设的默认值,不写默认值,则返回None print(my_cat.get("weight")) # 输出:None print(my_cat.get("weight", "未记录")) # 输出:未记录
1.4 修改与添加数据
-
修改已有键的值
my_cat["age"] = 3 # 年龄更新为3岁
-
添加新键值对
my_cat["color"] = "white" # 添加颜色为白色
简单理解:
修改
和添加
使用同一个方法dict[键]=值
,遵循有则修改,无则添加
原则。
1.5 删除数据
-
del语句 - 永久删除
del my_cat["color"] # 删除颜色信息 # 若键不存在,则报错KeyError
-
pop() - 删除并返回值
# 若键不存在,则报错KeyError age = my_cat.pop("age") # 返回3并删除该键 # 安全删除 age = my_cat.pop("age", "已删除") # 若键存在,返回要删除键的值 # 若键不存在,返回预设的默认值(这里是"已删除"),不会报错
-
popitem() - 删除最后插入的项 (Python3.7+)
last_item = my_cat.popitem() # Python 3.7+ 才保证删除最后插入的项 # 之前版本是随机删除 # 若字典为空,则报错:KeyError
-
clear() - 清空字典
my_cat.clear() # 变为{}
注意:删除不存在的键会报错,建议先用
in
检查。# 安全删除建议 if "color" in my_cat: del my_cat["color"]
二、说明示例
# 1. 创建字典
cat = {"id": 1, "name": "咪咪", "species": "猫", "age": 2}
dog = dict([("id", 2), ("name", "大黄"), ("species", "狗")])
template = dict.fromkeys(["id", "name", "species"], "未登记")
# 2. 访问数据
print(cat["name"]) # 直接访问:咪咪
print(dog.get("age", 0)) # 安全访问:0(默认值)
# 3. 修改与添加
cat["age"] = 3 # 修改
dog["age"] = 4 # 添加
# 4. 删除数据
del cat["species"] # 删除指定键
cat.pop("age") # 删除并返回值
cat.popitem() # 删除最后插入的键(3.7+)
dog.clear() # 清空字典
三、知识点总结
3.1 字典定义
- 键值对存储:可变数据结构,通过唯一键关联值,键必须为不可变类型(数字、字符串、元组),值可为任意类型。
- 有序性:Python 3.7+ 按插入顺序维护键的顺序(非
排序
,仅保留插入顺序)。
3.2 创建字典
- 空字典:
{}
或dict()
(构造函数)。 - 含数据字典:
- 直接键值对(最常用);
dict()
构造函数(支持关键字参数、元组列表、zip
键值列表);fromkeys()
:批量创建键,值默认为None
或指定默认值(注意:默认值为可变对象时共享引用)。
3.3 访问数据
- 直接访问:
dict[键]
,键不存在时报KeyError
。 - 安全访问:
dict.get(键, 默认值)
,键不存在时返回默认值(默认为None
),避免报错。
3.4 修改与添加数据
- 统一操作:通过
dict[键] = 值
实现,键存在则修改值,不存在则添加新键值对(“有则改,无则加”)。
3.5 删除数据
del
:永久删除指定键值对,键不存在时报错。pop(键)
:删除并返回键对应的值,可指定默认值避免报错。popitem()
(3.7+):删除并返回最后插入的键值对(早期版本随机删除)。clear()
:清空字典所有键值对,保留空字典。- 安全删除:删除前用
if 键 in 字典
检查键是否存在。
3.6 常见错误
键重复导致数据覆盖
。使用列表等可变类型作为键
。如{[1,2]: "error"}
会报错。
四、知识点考察题
d = {0: 'no', 1: 'yes', True: 'ok'}
print(len(d), d[0], d[1], d[True])
以上代码的输出结果是什么( )❓
- A.
3 no yes ok
- B.
3 no ok ok
- C.
2 no ok ok
- D.
2 no yes yes
答案:C