官方解答|感測紀錄分類
官方解答
Python #361:感測紀錄分類
解題規則
展覽場館收到感測器名稱、讀值與啟用旗標,請分類並整理各組紀錄。
按原順序處理 records。分組鍵取「name 末字元,空名稱用空字串」;每筆加入該組的數值是「原始 value」。使用字典保留同組數值清單,組內保持原紀錄順序。最後依分組鍵的Python字串順序輸出,每組為 [分組鍵,組內轉換值清單,該組轉換值的數值總和]。沒有紀錄就回傳空清單。
處理步驟
每筆先計算分組鍵和轉換值,追加到該組清單;讀完後排序分組鍵,再對每組轉換值計算摘要。
為何正確
每個鍵值或紀錄都按指定規則處理;篩選、轉換、分組或讀值各自使用規定的來源。排序只作用於題目要求的輸出,原字典與組內紀錄順序保持不變。
邊界與注意事項
本題輸入範圍:最多12筆;name 長度0~20;value 為 -100~100;指定鍵均存在,name 可以重複。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。
範例追蹤
依參數順序 records 傳入 [[{"name":"B","value":3,"active":false},{"name":"Ada","value":-2,"active":true},{"name":"B","value":7,"active":true}]]。關鍵中間資料為 groups = {'B': [3, 7], 'a': [-2]};row = {'name': 'B', 'value': 7, 'active': True};name = 'B';value = 7。最後回傳 [['B', [3, 7], 10], ['a', [-2], -2]]。結果由 return 回傳,不使用 print。
複雜度
設項目數 n、最大鍵長 L;逐筆處理加上輸出排序最壞時間 O(nL log n),保存分組、歷史和結果最壞需要 O(nL) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
def solve(records):
groups = {}
for row in records:
name, value, active = row['name'], row['value'], row['active']
key = name[-1:]
converted = value
groups.setdefault(key, []).append(converted)
result = []
for key in sorted(groups):
values = groups[key]
result.append([key, values, sum(values)])
return result
留言討論 0
登入 後就能留言,一起討論不同的寫法。