🐸

计数账本

数据与文本工具python-data-tinkerer-13-the-count-ledger
奖励: 110 XP
|

计数账本

共享架子的比较刚结束,记录室里又送来一叠借阅纸条。每来一张纸条,Hoppy 就会看到一个卷轴标题:有些标题只出现一次,有些标题会一再重复。现在问题不再是“它在不在”,而是“它一共出现了几次”。

这时候,单纯把标题堆在一起已经不够用了。Hoppy 需要一本小账本:每个卷轴标题对应一个数字,记住它被请求了多少次。这里,dict 就很像一张真正的计数台。

dict 可以把“名字 -> 次数”这类记录组织起来

你以前已经见过 dict 的基本样子,这一课不再重新介绍花括号本身,而是把它放进更真实的记录任务里:当同一个标题会反复出现时,我们想要的不是重复列表,而是“每个标题出现了几次”。

borrow_log = ["Moon Map", "Fern Atlas", "Moon Map", "Bell Log"]
count_ledger = {}

print("Borrow log:", borrow_log)

for title in borrow_log:
  if title not in count_ledger:
      count_ledger[title] = 0

  count_ledger[title] += 1

print("Count ledger:", count_ledger)

在这段代码里,dict 的键是卷轴标题,值是出现次数。第一次看到某个标题时,先给它一个起点 0;之后每看到一次,就把对应数字加 1

键负责“按名字分账”,值负责“记住数量”

这节课最重要的直觉不是背更多字典语法,而是看懂这张账本的形状:"Bell Map" 这样的标题是键,3 这样的数字是值。于是零散的借阅纸条,就会被整理成一份更有用的统计记录。

你现在不用进入嵌套字典,也不用把 dict 扩展成完整专题。先把这一种很实用的画面记住:当你需要组织“名字 -> 次数”时,字典就很自然。

1
先看现成的借阅记录和空账本

starter 已经给你 borrow_log 和空的 count_ledgerborrow_log 里有重复标题,这正是今天要统计的材料。

2
在循环里补上“首次登记”和“继续加 1”

starter 已经帮你写好了 for title in borrow_log。你要做的是:如果这个标题还没出现在 count_ledger 里,就先把它设成 0;然后再给这个标题加 1

3
运行后看看整本计数账本

运行后,你会看到原始借阅记录,以及整理好的 Count ledger:。这一刻最值得记住的是:dict 不只是“存信息”,它还能把重复出现的数据收束成清楚的统计结果。

为什么这里要用 dict?

因为这类任务天然是“一个名字,对应一个数量”。如果你只保留列表,就还得反复数;如果你把标题当键、把次数当值,记录就立刻变成一张能直接阅读的账本。

参考答案
点击展开
参考答案:
borrow_log = ["Bell Map", "Moss Atlas", "Bell Map", "Star Ledger", "Bell Map", "Moss Atlas"]
count_ledger = {}

print("Borrow log:", borrow_log)

for title in borrow_log:
  if title not in count_ledger:
      count_ledger[title] = 0

  count_ledger[title] += 1

print("Count ledger:", count_ledger)
高级技巧
想更进一步?点击展开

现在你还不需要把字典想成一整套庞大体系。先抓住这个工作台感:手里有一串重复记录时,字典可以把它们整理成“标题 -> 次数”的结果。

以后当你遇到“谁来过几次”“哪个标签出现了几次”“哪种材料被请求了几次”这种任务时,都可以想起今天这本计数账本。对这类统计动作来说,dict 往往比单纯堆列表更自然。

Loading...
终端输出
Terminal
Ready to run...