串列與字典:整理一堆資料
一個變數只能裝一個值,但記帳有一整個月的資料。用串列裝「一排東西」,用字典裝「有欄位的資料」,再把兩者組合起來。
一個盒子不夠用了
到目前為止,每個變數都只裝一個值:lunch = 85。可是一個月有幾十筆花費,總不能取 cost1、cost2……一路到 cost60 吧?
這堂課要學兩種「可以裝很多東西」的容器:串列和字典。學會它們,下一堂就能動手做記帳小工具了。
串列:一排有順序的東西
串列(list)用中括號,把資料用逗號隔開:
costs = [85, 45, 120, 60]
print(costs)
print(len(costs))
print(sum(costs))
[85, 45, 120, 60]
4
310
len() 算有幾個,sum() 算總和。光這兩個,就省掉你上一堂寫的累加迴圈了。
用位置拿資料
串列裡每個東西都有位置編號,叫做索引。重點是:從 0 開始數。
print(costs[0])
print(costs[2])
print(costs[-1])
85
120
60
costs[-1] 是「倒數第一個」,想拿最後一筆時很方便。
從 0 開始數,是新手最常搞混的地方,多看幾次就習慣了。
新增資料與逐一處理
costs.append(35)
for c in costs:
if c >= 100:
print(f"大筆花費:{c} 元")
大筆花費:120 元
.append() 把新資料加到最後面。for c in costs 會依序把每個值放進 c,一筆一筆處理。
字典:用名字找資料
一筆花費其實不只有金額,還有日期、類別、說明。如果用串列寫成 ["11/03", "餐費", 85],過一陣子你就會忘記第幾個是什麼。
字典(dict)用大括號,每一項是 鍵: 值 的組合:
record = {"date": "2026-11-03", "category": "餐費", "item": "雞腿便當", "amount": 85}
print(record["item"])
print(record["amount"])
雞腿便當
85
用 record["amount"] 而不是 record[3],程式本身就說明了它在做什麼。要修改或新增欄位也很簡單:
record["amount"] = 90
record["note"] = "加滷蛋"
組合起來:一張表格
把很多筆字典放進一個串列,就得到了一張「表格」:
records = [
{"category": "餐費", "item": "雞腿便當", "amount": 85},
{"category": "交通", "item": "捷運", "amount": 30},
{"category": "餐費", "item": "珍奶", "amount": 60},
]
total = 0
for r in records:
total += r["amount"]
print(f"共 {len(records)} 筆,總計 {total} 元")
共 3 筆,總計 175 元
這個結構非常重要。之後你會遇到的 CSV 檔、Excel 表、網路 API 回傳的資料,幾乎都可以想成「字典組成的串列」。
依類別加總
用一個字典當「各類別的小計」,是很常見的技巧:
by_category = {}
for r in records:
cat = r["category"]
by_category[cat] = by_category.get(cat, 0) + r["amount"]
print(by_category)
{'餐費': 145, '交通': 30}
by_category.get(cat, 0) 的意思是「拿這個類別目前的小計,如果還沒有,就當作 0」。這一行剛開始可能看不太懂,沒關係,這正是很適合問 AI 的地方。
我在學 Python 的字典。請一步一步解釋下面這段程式,用表格列出迴圈每一圈之後 by_category 的內容,並告訴我如果把 .get(cat, 0) 改成 by_category[cat],會發生什麼錯誤、為什麼。
(貼上上面「依類別加總」的程式)
建立 week.py:
- 建一個串列
records,放進至少 5 筆你這週真實的花費,每筆是一個字典,包含category、item、amount。 - 印出總筆數和總金額。
- 印出金額最大的那一筆的品項名稱。(提示:用迴圈比較,或問 AI 有沒有更簡單的寫法,再確認你看得懂它的答案。)
- 依類別加總,印出每個類別花了多少。
讀完了嗎?
標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。
留言與討論
卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。