Python3 字典
字典(dict)以**键值对(key-value)**方式存储数据,通过键直接查找值,速度极快,写法与 JSON 天然对应。字典是可变容器,Python 3.7 起保持插入顺序。定义用花括号 {},键值之间用冒号。
创建字典
d1 = {"name": "小明", "age": 18}
d2 = dict(name="小红", age=20) # 关键字方式
d3 = dict(zip(["a", "b"], [1, 2])) # zip 配对
print(d1["name"]) # 输出:小明
print(d3) # 输出:{'a': 1, 'b': 2}
键必须不可变
d = {("北京", 1): "坐标", "k": 1, 3: "数字键"}
# d[[1, 2]] = "x" # 报错:TypeError: unhashable type: 'list'
访问 d[key]/get/setdefault
d[key] 键不存在会报 KeyError;get 更安全、可给默认值;setdefault 在键缺失时写入默认值:
d = {"name": "小明"}
print(d["name"]) # 输出:小明
print(d.get("age")) # 输出:None(不报错)
print(d.get("age", 0)) # 输出:0
print(d.setdefault("age", 18)) # 输出:18,并写入
print(d) # 输出:{'name': '小明', 'age': 18}
增删改
直接给键赋值即新增或修改;pop 删除并返回,del 只删除,clear 清空:
d = {"a": 1}
d["b"] = 2 # 新增
d["a"] = 100 # 修改
print(d) # 输出:{'a': 100, 'b': 2}
v = d.pop("a") # 删除并返回
print(v, d) # 输出:100 {'b': 2}
del d["b"]
d.clear()
print(d) # 输出:{}
遍历 items/keys/values
scores = {"语文": 90, "数学": 95}
for k, v in scores.items():
print(k, v) # 输出:语文 90 数学 95(分两行)
print(list(scores.keys())) # 输出:['语文', '数学']
print(list(scores.values())) # 输出:[90, 95]
in 判断键与嵌套字典
in 只判断键是否存在;值可以是任意对象,嵌套字典常用于结构化数据:
scores = {"语文": 90, "数学": 95}
print("语文" in scores) # 输出:True
print(90 in scores) # 输出:False
stu = {"name": "小明", "scores": {"语文": 90, "数学": 95}}
print(stu["scores"]["数学"]) # 输出:95
字典推导式
square = {x: x * x for x in range(1, 5)}
print(square) # 输出:{1: 1, 2: 4, 3: 9, 4: 16}
合并 | 运算符
Python 3.9 起用 | 合并字典,右侧覆盖左侧同名键:
a = {"x": 1}
b = {"y": 2, "x": 9}
print(a | b) # 输出:{'x': 9, 'y': 2}
小结:字典是"键到值"的映射表,查找快、写法直观;配合 get、items 与推导式,处理结构化数据非常顺手。