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
]
]
]
]
}