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 访问字典数据
-
基本访问
# 值 = dict[键] # 键不存在时, 会报错KeyError print(my_cat["name"]) # 输出:咪咪错误案例:
print(my_cat["weight"]) # KeyError: 'weight' 会崩溃 -
避免报错的安全访问
# 当键不存在时,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