当前位置:首页>python>【Python】Day10:字典基础 —— 键值对映射

【Python】Day10:字典基础 —— 键值对映射

  • 2026-10-11 08:00:17
【Python】Day10:字典基础 —— 键值对映射

🎯 学习目标

  1. 理解字典的本质:键值对的集合,通过键(key)快速找到值(value),就像查字典一样
  2. 掌握字典的创建方式:{}和dict()
  3. 学会用 键 访问值,理解dict[key] 和dict.get(key)的区别
  4. 掌握字典的增、删、改、查基本操作
  5. 学会遍历字典的三种方式:keys()、values()、items()
  6. 能用字典存储和查询结构化数据

一、字典的概念与创建

  1. 为什么需要字典?列表用 索引编号 找元素,但编号没有含义:

    student = ["小王", 18, "北京"]# 0 是名字?1 是年龄?2 是城市?记不住!

    字典用有意义的键来找值,一眼就懂:

    student = {"name": "小王", "age": 18, "city": "北京"}print(student["name"])    # 小王:一看就懂!
  2. 字典长什么样?

    • 用花括号{}包裹,键值对用key: value 表示,用逗号分隔:
      # 键是字符串(最常见)person = {"name": "小王", "age": 18, "height": 1.75}# 键也可以是数字scores = {1: "优秀", 2: "良好", 3: "及格"}# 空字典empty = {}empty2 = dict()
  3. 创建字典的几种方式

    • 直接用{}(最常用):
      info = {"name": "小王", "age": 18}
    • 用dict()+ 关键字参数:
      info = dict(name="小王", age=18)     # 键不需要引号print(info)                           # {'name': '小王', 'age': 18}
    • 用dict()+ 列表/元组对:
      info = dict([("name", "小王"), ("age", 18)])print(info)                           # {'name': '小王', 'age': 18}
    • 用dict.fromkeys()批量创建相同值的字典:
      keys = ["name", "age", "city"]info = dict.fromkeys(keys, "未知")print(info)                           # {'name': '未知', 'age': '未知', 'city': '未知'}
  4. 字典的核心特征

    特征
    说明
    键值对
    每个数据由 key 和 value 组成
    键唯一
    同一个键不能重复,后出现的会覆盖前面的
    键不可变
    键只能是 int、str、tuple 等不可变类型,不能是 list
    值任意
    值可以是任何类型
    无序
    Python 3.7+ 保持插入顺序,但不要依赖位置访问
    # 键重复:后面的覆盖前面的d = {"name": "小王", "name": "小李"}print(d)                # {'name': '小李'}# 键不能是列表# d = {[1, 2]: "value"}  # TypeError: unhashable type: 'list'# 键可以是元组d = {(1, 2): "坐标值"}print(d[(1, 2)])        # 坐标值

二、访问字典中的值

  1. 用dict[key] 访问:键不存在会报错
    student = {"name": "小王", "age": 18, "city": "北京"}print(student["name"])     # 小王print(student["age"])      # 18# 键不存在时报错# print(student["gender"])  # KeyError: 'gender'
  2. 用dict.get(key)访问:键不存在返回 None,不报错
    student = {"name": "小王", "age": 18, "city": "北京"}print(student.get("name"))       # 小王print(student.get("gender"))     # None(键不存在,返回 None)print(student.get("gender", "未知"))  # 未知(可以指定默认值)
  3. [] vs get()对比
    dict[key]dict.get(key)
    键存在
    返回值 ✅
    返回值 ✅
    键不存在
    keyError
     ❌
    返回 None ✅
    指定默认值
    不支持
    get(key, default)
    ✅
    使用场景
    确定键一定存在时
    不确定键是否存在时
  4. dict.setdefault():访问的同时设置默认值
    student = {"name": "小王", "age": 18}# 键不存在:返回默认值,并且把键值对写入字典gender = student.setdefault("gender", "未知")print(gender)             # 未知print(student)            # {'name': '小王', 'age': 18, 'gender': '未知'}# 键已存在:返回已有值,不会覆盖name = student.setdefault("name", "无名氏")print(name)               # 小王(不是"无名氏")print(student)            # name 仍然是"小王"

三、增和改:添加/修改键值对

  1. 直接赋值:键存在就改,键不存在就增
    student = {"name": "小王", "age": 18}# 改:键已存在,修改值student["age"] = 19print(student)            # {'name': '小王', 'age': 19}# 增:键不存在,添加新的键值对student["city"] = "上海"print(student)            # {'name': '小王', 'age': 19, 'city': '上海'}
  2. update():批量添加/修改
    student = {"name": "小王", "age": 18}# 用字典更新student.update({"age": 20, "city": "北京", "gender": "男"})print(student)# {'name': '小王', 'age': 20, 'city': '北京', 'gender': '男'}# 用关键字参数更新student.update(age=21, hobby="编程")print(student)# {'name': '小王', 'age': 21, 'city': '北京', 'gender': '男', 'hobby': '编程'}

四、删:删除键值对

  1. del dict[key]:删除指定键值对
    student = {"name": "小王", "age": 18, "city": "北京"}del student["city"]print(student)            # {'name': '小王', 'age': 18}# 键不存在会报错# del student["gender"]   # KeyError: 'gender'
  2. dict.pop(key):删除并返回值
    student = {"name": "小王", "age": 18, "city": "北京"}city = student.pop("city")print(city)               # 北京(返回被删的值)print(student)            # {'name': '小王', 'age': 18}# 可以指定默认值,键不存在时不报错gender = student.pop("gender", "未知")print(gender)             # 未知
  3. dict.popitem():删除并返回最后一对键值对
    student = {"name": "小王", "age": 18, "city": "北京"}last = student.popitem()print(last)               # ('city', '北京')  返回元组print(student)            # {'name': '小王', 'age': 18}
  4. dict.clear():清空字典
    student = {"name": "小王", "age": 18}student.clear()print(student)            # {}

五、遍历字典

  1. 遍历所有键keys()
    student = {"name": "小王", "age": 18, "city": "北京"}for key in student.keys():    print(key)# name# age# city# 简写:直接遍历字典就是遍历键for key in student:    print(key)
  2. 遍历所有值 values()
    student = {"name": "小王", "age": 18, "city": "北京"}for value in student.values():    print(value)# 小王# 18# 北京
  3. 遍历所有键值对items()(最常用!)
    student = {"name": "小王", "age": 18, "city": "北京"}for key, value in student.items():    print(f"{key}: {value}")# name: 小王# age: 18# city: 北京
  4. 判断键是否存在
    student = {"name": "小王", "age": 18}# 用 in 判断(判断的是键,不是值!)print("name"in student)       # Trueprint("小王"in student)       # False  "小王"是值,不是键# 想判断值是否存在print("小王"in student.values())  # True

六、字典的常用操作汇总

  1. 获取长度:len()
    d = {"name": "小王", "age": 18, "city": "北京"}print(len(d))             # 3(3个键值对)
  2. 字典合并
    a = {"x": 1, "y": 2}b = {"y": 99, "z": 3}# 方式一:update(修改 a)a_copy = a.copy()a_copy.update(b)print(a_copy)             # {'x': 1, 'y': 99, 'z': 3}  y 被覆盖了# 方式二:** 解包(Python 3.5+,创建新字典)c = {**a, **b}print(c)                  # {'x': 1, 'y': 99, 'z': 3}# 方式三:| 运算符(Python 3.9+)d = a | bprint(d)                  # {'x': 1, 'y': 99, 'z': 3}

⚠️ 常见坑

  1. dict[key]键不存在会keyError,用get()更安全
    d = {"name": "小王"}# print(d["age"])         # KeyErrorprint(d.get("age"))       # Noneprint(d.get("age", 0))    # 0
  2. in判断的是键,不是值
    d = {"name": "小王"}print("name"in d)        # True   查的是键print("小王"in d)        # False  "小王"是值,不是键
  3. 遍历时修改字典可能导致问题
    d = {"a": 1, "b": 2, "c": 3}# ❌ 不能在遍历时删除# for key in d:#     if d[key] > 1:#         del d[key]      # RuntimeError# ✅ 先收集要删的键,再删to_delete = [key for key, value in d.items() if value > 1]for key in to_delete:del d[key]print(d)                  # {'a': 1}
  4. 键只能是不可变类型
    # d = {[1, 2]: "value"}   # TypeError: unhashable type: 'list'd = {"1": "value"}        # ✅ 字符串做键d = {1: "value"}          # ✅ 数字做键d = {(1, 2): "value"}     # ✅ 元组做键
  5. 空字典{}和空集合不要混淆
    empty_dict = {}           # 这是空字典empty_set = set()         # 这是空集合print(type(empty_dict))   # <class 'dict'>print(type(empty_set))    # <class 'set'>

✍️ 实战练习

  1. 单词翻译器
    • 要求:创建一个英中词典字典,用户输入英文单词,输出中文翻译,找不到则提示。
    • 示例:
      dictionary = {"hello": "你好","world": "世界","python": "蟒蛇","code": "代码","program": "程序"}word = input("请输入英文单词:").lower()meaning = dictionary.get(word, "词典中未收录该单词")print(f"{word} 的意思是:{meaning}")
  2. 学生信息卡
    • 要求:用字典存储一个学生的信息(姓名、年龄、城市、爱好),依次输出每个字段。
    • 示例:
      student = {"name": "小王","age": 18,"city": "北京","hobby": "编程"}for key, value in student.items():    print(f"{key}: {value}")
  3. 统计字符出现次数
    • 要求:输入一个字符串,统计每个字符出现的次数,用字典存储并输出。
    • 示例:
      text = input("请输入一段文字:")char_count = {}for ch in text:    char_count[ch] = char_count.get(ch, 0) + 1for ch, count in char_count.items():    print(f"'{ch}': {count}次")
      输入:hello输出:'h': 1次'e': 1次'l': 2次'o': 1次
  4. 商品价格查询
    • 要求:用字典存储商品价格,用户输入商品名,输出价格;输入"全部"则列出所有商品。
    • 示例:
      products = {"苹果": 5.5,"香蕉": 3.8,"橘子": 4.2,"葡萄": 12.0,"西瓜": 2.5}query = input("请输入商品名(输入"全部"查看所有):")if query == "全部":for name, price in products.items():        print(f"{name}: ¥{price}")else:    price = products.get(query)if price isnotNone:        print(f"{query}: ¥{price}")else:        print(f"未找到商品:{query}")

✅ 自测清单

  • [ ] 能解释字典是"键值对集合",通过键快速找到值
  • [ ] 能用{}和dict()两种方式创建字典
  • [ ] 能区分dict[key] 和dict.get(key)的区别,知道后者更安全
  • [ ] 能用直接赋值dict[key] = value 添加或修改键值对
  • [ ] 能用del、pop()、popitem()、clear()删除键值对
  • [ ] 能用keys()、values()、items()三种方式遍历字典
  • [ ] 知道in判断的是键不是值
  • [ ] 知道字典的键必须是不可变类型(str、int、tuple),不能是list

最新文章

随机文章