我們有一個小組成績日志:
log = {
'Alex': [3, 7, 11, 10, 8],
'Ben': [6, 12, 4, 9, 9],
'Сarla': [5, 10, 7, 5, 9]}
輸出“最好的學生 X,他的最高分 Y,最低分 Z”
解決方案
我有一本字典,我決定做的第一件事是轉換它并通過掛鉤每個學生的最高和最低分數來用新的值替換值。之后,在一個回圈中,我只想遍歷每個學生的最高分數并找到最大平均值,并使用它回傳字典中與含義相對應的鍵。但是發生了我無法弄清楚的錯誤。通過回圈后,資料被轉換為int,無法使用它們。該怎么辦?
代碼
log = {
'Alex': [3, 7, 11, 10, 8],
'Ben': [6, 12, 4, 9, 9],
'Carla': [5, 10, 7, 5, 9]}
log.update({"Alex":[min(log["Alex"])] [max(log["Alex"])],
"Ben":[min(log["Ben"])] [max(log["Ben"])],
"Carla":[min(log["Carla"])] [max(log["Carla"])]})
for i,j in log.values():
print(max(i,j))
輸出
3 11
4 12
5 10
這就是問題所在, int 物件不是 itarible。我想找到最大的一對,即max(j),我必須通過,但是我怎樣才能一次回傳一對值,而不僅僅是max(j)。
uj5u.com熱心網友回復:
我必須承認,我并不是 100% 清楚你想要實作的目標——無論如何,這是我的嘗試(使用最少的 Python 概念并盡可能地維護你的代碼):
log = {
'Alex': [3, 7, 11, 10, 8],
'Ben': [6, 12, 4, 9, 9],
'Carla': [5, 10, 7, 5, 9]}
for key, vs in log.items():
log.update({key: [[min(vs)] [max(vs)]]})
#log.update({"Alex":[min(log["Alex"])] [max(log["Alex"])],
# "Ben":[min(log["Ben"])] [max(log["Ben"])],
# "Carla":[min(log["Carla"])] [max(log["Carla"])]})
current_max = 0
current_min = 100
best_student = "Unknown"
for name, vs in log.items(): # this retrieves key and value for each entry in the dictionary
mx = vs[1] # why are you comparing the mix with the max of each student? Should this always be j[1]?
mn = vs[0]
if mx > current_max:
current_max, current_min, best_student = mx, mn, name
print("Best student is " best_student " his top vote is " str(current_max) ". His lowest vote is " str(current_min))
幾點意見:
使用回圈來運行日志更新更安全:如果你忘記手動運行 1 個學生的更新,你會遇到麻煩。回圈“確保”這不會發生
為什么,當您運行日志字典的更新時,您會使用串列串列進行更新,其中第一個串列始終包含最小值,第二個串列始終包含最大值?你不能只使用一個簡單的串列來更新,其中第一個元素是最小值,第二個元素是最大值?
log.update({key: [min(vs), max(vs)]})我不明白為什么在你的回圈中,你檢查兩個數字之間的最大值(我指的是
m = max(vs[0]),或者max(i, j)在你的情況下),你已經知道第一個是最小值,第二個是最大值。如果您應用上一點中描述的更改,這將變成:m = vs[1]
注意:我修改了代碼,以便列印出對最佳學生的最低投票數。current_max和current_min分別用低值和高值初始化,以便回圈中的邏輯起作用(如果 2 個數字在可能的投票范圍之外,第一個學生行程將立即更新current_max和current_min)。current_max=0考慮到我認為此框架中的投票不能為負,您實際上可以進行初始化
uj5u.com熱心網友回復:
這是找到最好的學生的方式:
def by_total_grade(name):
return sum(grades[name])
best_student = max(grades, key=by_total_grade)
完整示例:
grades = {
"Alex": [3, 7, 11, 10, 8],
"Ben": [6, 12, 4, 9, 9],
"Сarla": [5, 10, 7, 5, 9],
}
best_student = max(grades, key=lambda k: sum(grades[k]))
best_grades = grades[best_student]
print(
f"Best student {best_student}, "
f"max score {max(best_grades)}, "
f"min score {min(best_grades)}."
)
輸出:
Best student Ben, max score 12, min score 4.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/350283.html
下一篇:Python正則運算式提取分和秒
