資料工程中階・巢狀資料攤平與區間合併
這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。
- 01
遞迴函數的練習
困難API 回傳的 JSON 常是巢狀結構,入庫前要攤平成「欄位名 → 值」。
請寫遞迴函數 flatten(obj, prefix=''),規則:
- 字典的 key 用 '.' 串接成欄位名
- 串列用索引當欄位名的一段(例如 tags.0、tags.1)
- 其他值(字串、數字、布林、None)直接當作值
資料(hard code 於程式中):
record = {'id': 7, 'user': {'name': 'Amy', 'contact': {'city': 'Taipei'}}, 'tags': ['vip', 'new'], 'active': True}
依攤平後的順序(與原始 key 順序相同)逐行印出「欄位名 = 值」。
輸出格式(每個欄位一行):
欄位名 = 值
作答登入後可作答 - 02
巢狀文件攤平
中等MongoDB 的文件可以巢狀;要寫進 MySQL 或 BigQuery 的扁平表時需要攤平。變數
doc是一筆巢狀 dict,請寫遞迴函式flatten(obj, prefix=''),把巢狀 dict 的 key 用.串接、list 的元素用索引當 key(例如tags.0),回傳扁平 dict。依 key 排序印出<key>=<value>。本題在瀏覽器內以 Pyodide 執行,只能用 Python 標準函式庫(json、csv、collections、itertools、datetime、re、math、heapq 等)。
作答登入後可作答 - 03
一維串列的練習
中等爬蟲排程表記錄了每個任務佔用的時段(整點,[開始, 結束],結束 >= 開始)。
時段有重疊或首尾相接(例如 [1, 3] 與 [3, 5])就視為同一段忙碌時間。
請把時段合併後,依開始時間印出每段忙碌時間,最後印出總共佔用幾小時。
資料(hard code 於程式中,順序是亂的):
slots = [[9, 11], [1, 3], [2, 4], [13, 14], [10, 12], [4, 5]]
輸出格式(每段一行,最後一行是總時數):
開始 ~ 結束
佔用時數: (時數)
作答登入後可作答

送件鴿飛出去了