# 2025/04/16-20:30
students = {
"annie": {"國文": 90, "數學": 95, "英文": 88},
"lydia": {"國文": 85, "數學": 91, "英文": 90},
"mary": {"國文": 80, "數學": 82, "英文": 84}
}
# 建立 (名字, 總分) 的列表
ranking = []
for name, subjects in students.items():
total = sum(subjects.values())
ranking.append((name, total))
# for name, subjects in students.items():
# 這行的意思是:
# students.items() 會把整個 students 字典的 key 和 value 一起拿出來。
# name 是學生的名字(像 "annie")
# subjects 是該學生的成績字典(像 {"國文": 90, "數學": 95, "英文": 88})
# 👉 簡單說,每次迴圈會拿出一位學生的 名字與他的所有成績
# total = sum(subjects.values())
# ✅ 這行的意思是:
# subjects.values() 會拿出成績字典的所有分數值(例如 [90, 95, 88])
# sum(...) 會把這些分數加總,得到總分
# ranking.append((name, total))
# ✅ 這行的意思是:
# 把 name 和 total 做成一個小 tuple (name, total)
# 然後加進去 ranking 這個列表中
# 👉 結果像:ranking = [("annie", 273), ("lydia", 266), ("mary", 246)]
# 小結一下做了什麼:
# 它把每個學生的:
# 名字(key)
# 總分(sum of 成績)
# 放到 ranking 裡面,之後就可以拿這個列表來做排序與排名!
# 如果你想印出中間過程,加入 print(name, total) 就可以看到每一步算出來的結果。
# 依總分由高至低排序
ranking.sort(key=lambda x: x[1], reverse=True)
# 顯示排名結果
print("📊 成績排名:")
for i, (name, total) in enumerate(ranking, start=1):
print(f"{i}. {name.capitalize()}:總分 {total} 分")
# 執行結果會是:
# 📊 成績排名:
# 1. Annie:總分 273 分
# 2. Lydia:總分 266 分
# 3. Mary:總分 246 分
avg = total / len(subjects)
# print(f"{name.capitalize()}:{subjects} ➜ 平均:{avg:.2f} 分")
# 要同時顯示每個人各科成績 + 平均分數,可以加上這段
# 結構分析
# students = {
# "annie": {
# "國文": 90,
# "數學": 95,
# "英文": 88
# }
# }
# 這是「巢狀字典」結構,可以理解成:
# students 是一個大字典
# "annie" 是這個字典中的一個鍵(key)
# {"國文": 90, "數學": 95, "英文": 88} 是對應的值(value),也是一個字典
# 🔍 所以你問的重點是:
# 「國文」是鍵,90 是值,那 "annie" 是什麼?
# 👉 答案是:annie 是 students 字典中的「鍵」。
# 更完整的關係如下:
# 層級 鍵 值
# 外層字典 students "annie" {"國文": 90, "數學": 95, "英文": 88}
# 內層字典 students["annie"] "國文" 90
# "數學" 95
# "英文" 88
# ✅ 所以你可以這樣取得資料:
# students["annie"] # 取出 annie 的整個成績字典
# students["annie"]["國文"] # 取出 annie 的國文分數(90)
# 實用範例:列出每個科目的分數
# for subject, score in subjects.items():
# print(f"{subject}:{score} 分")
# 💡會印出:
# 國文:90 分
# 數學:95 分
# 英文:88 分
# 補充說明
# 假設:
# subjects = {"國文": 90, "數學": 95, "英文": 88}
# 你可以這樣取得:
# 語法 取得內容 範例結果
# subjects.keys() 所有「科目名稱」 dict_keys(['國文', '數學', '英文'])
# subjects.values() 所有「成績」 dict_values([90, 95, 88])
# subjects.items() 同時取得「科目名稱 和 分數」 [('國文', 90), ('數學', 95), ('英文', 88)]