大家好,我是 星源,19岁自学Python的编程小白 🤓。 今天是字典篇的收尾战!带大家搞定嵌套字典、漂亮打印、井字棋实战、野餐物品统计,最后用习题夯实基础!🚀


📌 今日学习内容

👉 “用字典嵌套存复杂数据,打印野餐物品表格,把字典玩出花!”


✨ 知识点讲解

1️⃣ 嵌套字典和列表

  • 概念:字典的值可以是列表或其他字典,构建复杂数据结构。

  • 示例

    guest_items = {
        'A': {'苹果': 5, '披萨': 12},
        'B': {'三明治': 3, '苹果': 2},
        'C': {'杯子': 3, '面条': 1}
    }

2️⃣ 项目:野餐物品统计

  • 目标:统计所有客人的食物总数。

  • 代码

    def totalBrought(guests, item):
        numBrought = 0
        for k, v in guests.items():
            numBrought += v.get(item, 0)
        return numBrought
    ​
    # 定义客人物品
    allGuests = {
        'A': {'苹果': 5, '披萨': 12},
        'B': {'三明治': 3, '苹果': 2},
        'C': {'杯子': 3, '面条': 1}
    }
    ​
    print('带来的物品总数:')
    print(' - 苹果 ' + str(totalBrought(allGuests, '苹果')))
    print(' - 杯子 ' + str(totalBrought(allGuests, '杯子')))
    print(' - 蛋糕 ' + str(totalBrought(allGuests, '蛋糕')))
    print(' - 火腿三明治 ' + str(totalBrought(allGuests, '火腿三明治')))
    print(' - 苹果派 ' + str(totalBrought(allGuests, '苹果派')))

3️⃣ 列表到字典的函数

  • 目标:合并战利品列表到物品清单。

  • 代码

    def addToInventory(inventory, addedItems):
        for item in addedItems:
            inventory[item] = inventory.get(item, 0) + 1
        return inventory
    ​
    # 定义初始库存
    inv = {'金币': 42, '绳子': 1}
    # 定义新增物品
    dragonLoot = ['金币', '匕首', '金币', '金币', '红宝石']
    # 更新库存
    inv = addToInventory(inv, dragonLoot)
    # 打印更新后的库存
    print(inv)

4️⃣ 漂亮打印(上节课补充)

  • 模块pprint → 格式化打印复杂数据结构。

  • 示例

    import pprint
    pprint.pprint(inv)

5️⃣ 字典方法(上节课补充)

  • copy()deepcopy()

    import copy
    >>> cheese = spam.copy()  # 浅复制
    >>> cheese = copy.deepcopy(spam)  # 深复制

✨ 课后习题

  1. 空字典的代码:{}

  2. 包含键 'fow' 和值 42 的字典:{'fow': 42}

  3. 字典和列表的主要区别:字典无序,键可以是任意类型;列表有序,键只能是整数。

  4. spam['foo'] 触发 KeyError

  5. cat in spam.keys()cat in spam 无区别,后者是简写。

  6. cat in spam.values() 检查值是否存在。

  7. 简洁写法:spam.setdefault('color', 'black')

  8. 漂亮打印模块:pprint,函数:pprint()


✅ 总结

  1. 字典支持嵌套,构建复杂数据结构。

  2. 野餐物品项目:用双重循环统计总数。

  3. 战利品函数:用 get() 安全累加值。

  4. pprint 模块让字典打印更整齐。

  5. 复制字典用 copy()(浅)或 deepcopy()(深)。


📢 互动提问

👉 “第一次写嵌套字典时,有没有把键名写错导致数据乱套?” 留言分享你的“数据结构车祸现场”,一起互相安慰!

更多推荐