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 与推导式,处理结构化数据非常顺手。

笔记加载中…