Python3 入门教程
字典
本教程共 70 篇 · 第 14 篇 · 更新于 2026-07-22 · 约 2 分钟阅读
PythonPython3 入门教程Python 字典字典推导式defaultdict可哈希
14. 字典
本节目标:掌握字典的增删改查、遍历和推导式,能用它高效存储和查找键值对数据。
字典是什么
字典(dict)是 Python 最常用的数据结构之一,用来存储「键值对」(key-value)。
person = {
"name": "Alice",
"age": 25,
"city": "Beijing"
}
每个键对应一个值,通过键来查找值,速度极快(接近 O(1))。
Note字典的键必须是不可变类型:字符串、数字、元组都可以,列表不行。
创建字典
# 字面量创建
d1 = {"a": 1, "b": 2}
# 空字典
d2 = {}
d3 = dict()
# 从键值对序列创建
d4 = dict([("a", 1), ("b", 2)])
# 关键字参数创建
d5 = dict(a=1, b=2)
# 从两个序列创建(键和值配对)
keys = ["a", "b", "c"]
values = [1, 2, 3]
d6 = dict(zip(keys, values))
增删改查
访问值
>>> d = {"name": "Alice", "age": 25}
>>> d["name"]
'Alice'
>>> d["gender"] # 键不存在会报错
KeyError: 'gender'
安全访问的两种方式:
# 方式一:先判断
if "gender" in d:
print(d["gender"])
# 方式二:用 get(),不存在时返回 None(或指定默认值)
>>> d.get("gender") # None
>>> d.get("gender", "unknown") # 'unknown'
添加和修改
>>> d["gender"] = "female" # 添加新键值对
>>> d["age"] = 26 # 修改已有键的值
>>> d
{'name': 'Alice', 'age': 26, 'gender': 'female'}
删除
>>> d = {"a": 1, "b": 2, "c": 3}
# 删除指定键(并返回值)
>>> d.pop("b")
2
>>> d
{'a': 1, 'c': 3}
# 删除并返回最后插入的键值对(Python 3.7+)
>>> d.popitem()
('c', 3)
# 清空
>>> d.clear()
>>> d
{}
# 用 del 删除键
del d["a"]
遍历字典
>>> d = {"name": "Alice", "age": 25, "city": "Beijing"}
# 遍历键(默认)
>>> for key in d:
... print(key)
name
age
city
# 遍历值
>>> for value in d.values():
... print(value)
Alice
25
Beijing
# 遍历键值对
>>> for key, value in d.items():
... print(f"{key}: {value}")
name: Alice
age: 25
city: Beijing
Tip需要同时遍历索引、键、值时,用
enumerate:for i, (k, v) in enumerate(d.items()): print(i, k, v)
字典的合并与更新
Python 3.9+ 支持用 | 合并字典:
>>> d1 = {"a": 1, "b": 2}
>>> d2 = {"b": 3, "c": 4}
>>> d1 | d2
{'a': 1, 'b': 3, 'c': 4} # 后面的值覆盖前面的
老版本用 update():
>>> d1 = {"a": 1}
>>> d1.update({"b": 2, "c": 3})
>>> d1
{'a': 1, 'b': 2, 'c': 3}
字典推导式
和列表推导式类似,可以一行生成字典:
# 平方数映射
>>> {x: x**2 for x in range(5)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 从已有字典筛选
>>> prices = {"apple": 3, "banana": 2, "cherry": 8}
>>> {k: v for k, v in prices.items() if v > 2}
{'apple': 3, 'cherry': 8}
# 交换键值(值必须可哈希才能当键)
>>> {v: k for k, v in {"a": 1, "b": 2}.items()}
{1: 'a', 2: 'b'}
setdefault:一键设置默认值
setdefault 在键不存在时设置默认值,存在时返回原值:
>>> d = {"a": 1}
>>> d.setdefault("a", 100) # 键已存在,返回原值
1
>>> d.setdefault("b", 2) # 键不存在,设置并返回
2
>>> d
{'a': 1, 'b': 2}
这在按类别分组时特别有用:
>>> data = [("fruit", "apple"), ("fruit", "banana"), ("veg", "carrot")]
>>> groups = {}
>>> for category, item in data:
... groups.setdefault(category, []).append(item)
>>> groups
{'fruit': ['apple', 'banana'], 'veg': ['carrot']}
collections.defaultdict
标准库提供了更优雅的版本:
from collections import defaultdict
groups = defaultdict(list)
for category, item in data:
groups[category].append(item)
访问不存在的键时,自动用 list() 创建空列表,省去 setdefault 的繁琐。
字典的键必须可哈希
字典在底层基于哈希表实现,所以键必须是不可变且可哈希的:
>>> hash("hello")
-123456789 # 具体值因运行环境而异
>>> hash((1, 2))
某整数值
>>> hash([1, 2])
TypeError: unhashable type: 'list'
想以列表内容当键?转成元组就行:
>>> d = {}
>>> key = tuple([1, 2, 3])
>>> d[key] = "value"
来源:参考了 runoob「Python3 字典」、liaoxuefeng「使用 dict 和 set」、w3cschool「Python3 字典」等,改写后所得。