数据结构 · 10 道样题

Python 字典练习题与答案

字典用来保存带标签的数据:一个键对应一个值,查找应该很快。真正有用的技能不是背下所有方法,而是知道键不存在时会发生什么。

50 道题在完整题库中 · 19 道选择 · 10 道填空 · 21 道输出

这个主题考什么

  • 用 get 安全读取可能不存在的键,而不是让程序崩溃。
  • 更新、合并并遍历键、值或键值对。
  • 识别哪些对象可以作为字典键。

常见错误

  • 键可能不存在时仍使用 d[key]。先判断应该用 get 还是默认值。
  • 在遍历字典时改变它的大小。应遍历键或键值对的副本。
  • 用列表作为键。字典键必须可哈希。
样题

样题

10

从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。

  1. 选择题q0594

    1. 小明从奶茶菜单查价格:menu.get("果茶", "暂无")。如果「果茶」不在菜单里,返回?

    1. 总是返回"暂无"
    2. "暂无"(键不存在时)
    3. 删除果茶键
    4. 添加果茶键
    显示答案

    答案

    B. "暂无"(键不存在时)

    解析: get(key, default) 在键存在时返回对应的值,不存在时返回默认值,且不会插入新键。所以菜单里没有水果茶就返回 'not available'。

  2. 选择题q0604

    2. 键缺失且没给默认值时,d.pop('a') 会怎样?

    1. KeyError
    2. None
    3. IndexError
    4. TypeError
    显示答案

    答案

    A. KeyError

    解析: pop 删除键并返回对应的值,但键缺失且没给默认值时会抛 KeyError;传第二个参数则改为返回它,两者差别很大。

  3. 选择题q0611

    3. 🧋 小明判断「珍珠奶茶」是否在菜单字典里,'key' in {'key':1} 的结果?

    1. True
    2. False
    3. 1
    4. 'key'
    显示答案

    答案

    A. True

    解析: in 检查的是键,'key' 正是这个字典的键,表达式为 True;值 1 在这里不起作用,别用值来判断成员关系。

  4. 选择题q0625

    4. Python 3.7+ 的普通字典按什么顺序保存键?

    1. 插入顺序
    2. 字母顺序
    3. 随机
    4. 按值排序
    显示答案

    答案

    A. 插入顺序

    解析: 从 Python 3.7 起,语言保证字典保持插入顺序,遍历就按加键的先后进行。要字母序得另外用 sorted()。

  5. 填空题q0596

    5. 小明判断「珍珠奶茶」是否在菜单字典 d 中:"珍珠奶茶" ___ d

    显示答案

    答案

    in

    解析: in 运算符检查的是键,只有 'bubble tea' 作为键存在时才为 True;它不看值,也不做任何类型转换。

  6. 填空题q0607

    6. 🧋 小明从奶茶字典查价格,查不到返回默认值,安全获取字典值:d.___('key', '默认值')

    显示答案

    答案

    get

    解析: get 先接键、再接兜底值,d.get('key', 'default') 不会抛异常。不传兜底值时返回 None。

  7. 填空题q0626

    7. 给菜单做一份独立副本。空里填哪个方法?

    backup = menu.____()
    显示答案

    答案

    copy

    解析: copy() 返回浅拷贝,给 backup 加键不会影响 menu;但嵌套的值仍然共享,深结构要用 deepcopy。

  8. 输出预测q0595

    8. get 和 setdefault 的区别在哪?输出什么?

    d = {"a": 1}
    print(d.get("b", 0), d.setdefault("c", 2), d)
    显示答案

    答案

    0 2 {'a': 1, 'c': 2}

    解析: get('b', 0) 返回 0 但不添加 b;setdefault('c', 2) 返回 2 并把 c 插进去。于是依次打印 0、2 和 {'a': 1, 'c': 2}。

  9. 输出预测q0618

    9. setdefault 设置不存在的 b 键,返回值是什么?

    d = {"a": 1}
    print(d.setdefault("b", 2), d)
    显示答案

    答案

    2 {'a': 1, 'b': 2}

    解析: setdefault 在键存在时返回原值,不存在时插入默认值并返回它。这里 b 缺失,于是返回 2,d 里也多出 b。

  10. 输出预测q0630

    10. `score('quirky')` 返回什么?

    POINTS = {
        'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1,
        'f': 4, 'g': 2, 'h': 4, 'i': 1, 'j': 8,
        'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1,
        'p': 3, 'q': 10, 'r': 1, 's': 1, 't': 1,
        'u': 1, 'v': 4, 'w': 4, 'x': 8, 'y': 4,
        'z': 10
    }
    
    
    def score(word):
        if not word.isalpha():
            return 0
        return sum(POINTS[letter] for letter in word.lower())
    
    print(score('quirky'))
    显示答案

    答案

    22

    解析: q 10、u 1、i 1、r 1、k 5、y 4,相加得 22,所以 score('quirky') 返回 22。没有任何去重,重复字母会再算一次。

常见问题

get 和方括号读取有什么区别?

d[key] 在键不存在时抛出 KeyError;d.get(key) 返回 None,d.get(key, default) 返回你给的默认值。

字典会保留插入顺序吗?

当前 Python 版本把插入顺序作为语言行为保留,但除非顺序是需求的一部分,不要依赖它。

继续保持练习节奏。

完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。

打开完整练习