
一、字典是什么想象一下你手机上的通讯录。你不会说第3个人是谁而是直接说张三的电话是多少。通讯录就是通过联系人姓名找到电话号码的。字典就是程序里的通讯录——它用键(Key)来查找对应的值(Value)。在Python里字典用花括号{}表示每一对数据由键和值组成用冒号:连接多对数据用逗号隔开键 值 键 值 键 值student {“name”: “张三”, “age”: 18, “city”: “北京”}键是查找的依据值是要找的数据。键必须是不可变类型——比如字符串、数字、元组。列表是可变类型不能作为字典的键这个坑我们后面会专门讲。二、根据键获取值想拿到字典里的某个值用字典名[键]:student {“name”: “张三”, “age”: 18, “city”: “北京”}print(student[“name”]) # 张三print(student[“age”]) # 18三、一个我踩过的坑KeyError如果访问一个不存在的键Python会报错student {“name”: “张三”, “age”: 18}print(student[“city”])运行后报错KeyError: ‘city’因为字典里没有city这个键所以找不到。每次访问字典之前最好确认你用的键是存在的。四、字典的常用操作1.新增或修改直接给一个键赋值如果键不存在就新增如果键已存在就覆盖student {“name”: “张三”, “age”: 18}新增一个键值对student[“city”] “北京”print(student) # {‘name’: ‘张三’, ‘age’: 18, ‘city’: ‘北京’}修改已有的键的值student[“age”] 19print(student) # {‘name’: ‘张三’, ‘age’: 19, ‘city’: ‘北京’}2.删除:pop()删除指定的键值对student {“name”: “张三”, “age”: 18, “city”: “北京”}student.pop(“city”)print(student) # {‘name’: ‘张三’, ‘age’: 18}3.安全取值get()用get()方法可以在键不存在时返回一个默认值而不是报错student {“name”: “张三”, “age”: 18}print(student.get(“city”)) # Noneprint(student.get(“city”, “未知”)) # 未知4.查看所有键、所有值、所有键值对student {“name”: “张三”, “age”: 18, “city”: “北京”}print(student.keys()) # dict_keys([‘name’, ‘age’, ‘city’])print(student.values()) # dict_values([‘张三’, 18, ‘北京’])print(student.items()) # dict_items([(‘name’, ‘张三’), (‘age’, 18), (‘city’, ‘北京’)])keys()、values()、items() 返回的是视图对象可以直接用于循环遍历但不能像列表那样直接按下标访问。如果需要下标访问可以用 list() 转换后使用但实际场景中通常直接遍历就够了。五、遍历字典1.遍历所有键值对最常用student {“name”: “张三”, “age”: 18, “city”: “北京”}for key, value in student.items():print(f{key}: {value})运行结果name: 张三age: 18city: 北京2.只遍历键for key in student.keys():print(key)3.只遍历值for value in student.values():print(value)六、一个我踩过的坑列表不能作为字典的键前面提到过字典的键必须是不可变类型。列表是可变的所以不能当键错误示范d {[“a”, “b”]: “这是列表当键”} # 报错运行后会报 TypeError: unhashable type: ‘list’。因为列表的内容可以随时增删改Python无法保证它稳定可用。但元组可以作为键因为元组是不可变的d {(“a”, “b”): “这是元组当键”}print(d[(“a”, “b”)]) # 这是元组当键七、列表VS字典场景 推荐用 原因按编号/顺序存取数据 列表 按位置查找速度快按名字/ID查找数据 字典 键值对应查找方便数据是一组固定字段 字典 每个字段有名字代码可读性高数据需要频繁增删改 列表或字典都可以 两者都支持看需求八、综合示例学生成绩管理系统把今天学的东西串起来用字典存储学生信息students {}while True:print(“\n— 学生成绩管理系统 —”)print(“1. 添加学生”)print(“2. 查看所有学生”)print(“3. 查询学生成绩”)print(“4. 删除学生”)print(“5. 退出”)choice input(请选择) if choice 1: name input(请输入姓名) score input(请输入成绩) students[name] score print(添加成功) elif choice 2: if len(students) 0: print(暂无学生数据) else: for name, score in students.items(): print(f{name}{score}分) elif choice 3: name input(请输入要查询的姓名) score students.get(name) if score is None: print(未找到该学生) else: print(f{name}的成绩是{score}分) elif choice 4: name input(请输入要删除的姓名) if name in students: students.pop(name) print(删除成功) else: print(未找到该学生) elif choice 5: print(再见) break else: print(无效选择请重新输入)这段代码包含了今天学的·字典的定义students {}·新增/修改students[name] score·查询students.get(name)·删除students.pop(name)·遍历for name, score in students.items()小结今天学的东西整理成一张速查表知识点 说明 示例定义字典 用 {} 包裹键值对 d 取值 通过键获取值 d[“name”]新增/修改 键不存在则新增存在则覆盖 d[“age”] 18get() 安全取值 d.get(“city”, “未知”)pop() 删除键值对 d.pop(“city”)keys() 获取所有键 d.keys()values() 获取所有值 d.values()items() 获取所有键值对 d.items()遍历 循环取出键值对 for k, v in d.items():键的要求 必须是不可变类型 字符串、数字、元组什么时候用字典·需要根据某个“名字”查找对应的“值”·存储一条记录的多个字段如用户信息、商品信息·需要快速查找不关心顺序下一篇我打算学集合。