Python 现代开发学习笔记

03-05 按书名分组统计

本章题解 · 全部练习

题目

输入记录 [("A", 20), ("B", 35), ("A", 45)],交回 {"A": 65, "B": 35}。分别用普通字典与 defaultdict(int) 完成,再说明按相邻键分组的 groupby 会把这份原始顺序分成几段。

推导与做法

普通字典用 get(key,0) 提供起始次数,defaultdict(int) 在缺少键时建立整数 0。每读一条记录就把分钟数加到对应书名下,两种实现均得到 A:65、B:35。

groupby 处理相邻项,原顺序会形成 A、B、A 三段。若要用它合并所有同名记录,先按书名排序;字典累计则不要求输入相邻。

实现与运行

查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。

在配套目录的 函数与模块/reading_project 中运行。

# 使用项目解释器运行本题,题号决定执行哪一组演示。
python "../../学习索引/参考实现/代码/ch03.py" 03-05

程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。

查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
  "dict": {
    "A": 65,
    "B": 35
  },
  "defaultdict": {
    "A": 65,
    "B": 35
  },
  "adjacent": [
    [
      "A",
      [
        [
          "A",
          20
        ]
      ]
    ],
    [
      "B",
      [
        [
          "B",
          35
        ]
      ]
    ],
    [
      "A",
      [
        [
          "A",
          45
        ]
      ]
    ]
  ]
}

笔记正文与全部题解 · Ctrl / ⌘ K