CodeSprout程式萌芽
困難第 371 題 · 感測紀錄分類
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Python

官方解答|感測紀錄分類

官方解答

Python #371:感測紀錄分類

解題規則

展覽場館收到感測器名稱、讀值與啟用旗標,請分類並整理各組紀錄。

按原順序處理 records。分組鍵取「name 轉小寫」;每筆加入該組的數值是「原始 value」。使用字典保留同組數值清單,組內保持原紀錄順序。最後依分組鍵的Python字串順序輸出,每組為 [分組鍵,組內轉換值清單,該組轉換值的最大值,空時為0]。沒有紀錄就回傳空清單。

處理步驟

每筆先計算分組鍵和轉換值,追加到該組清單;讀完後排序分組鍵,再對每組轉換值計算摘要。

為何正確

每個鍵值或紀錄都按指定規則處理;篩選、轉換、分組或讀值各自使用規定的來源。排序只作用於題目要求的輸出,原字典與組內紀錄順序保持不變。

邊界與注意事項

本題輸入範圍:最多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], 'ada': [-2]};row = {'name': 'B', 'value': 7, 'active': True};name = 'B';value = 7。最後回傳 [['ada', [-2], -2], ['b', [3, 7], 7]]。結果由 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.lower()
        converted = value
        groups.setdefault(key, []).append(converted)
    result = []
    for key in sorted(groups):
        values = groups[key]
        result.append([key, values, max(values, default=0)])
    return result

留言討論 0