AI & Data Dreamers練功房
寶箱片場規則
PIPELINE GATES・資料工程關卡・中階・3 題

資料工程中階・巢狀資料攤平與區間合併

這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。

  1. 01

    遞迴函數的練習

    困難

    API 回傳的 JSON 常是巢狀結構,入庫前要攤平成「欄位名 → 值」。

    請寫遞迴函數 flatten(obj, prefix=''),規則:

    1. 字典的 key 用 '.' 串接成欄位名
    2. 串列用索引當欄位名的一段(例如 tags.0、tags.1)
    3. 其他值(字串、數字、布林、None)直接當作值

    資料(hard code 於程式中):

    record = {'id': 7, 'user': {'name': 'Amy', 'contact': {'city': 'Taipei'}}, 'tags': ['vip', 'new'], 'active': True}

    依攤平後的順序(與原始 key 順序相同)逐行印出「欄位名 = 值」。

    輸出格式(每個欄位一行):

    欄位名 = 值

    作答登入後可作答
  2. 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 等)。

    作答登入後可作答
  3. 03

    一維串列的練習

    中等

    爬蟲排程表記錄了每個任務佔用的時段(整點,[開始, 結束],結束 >= 開始)。

    時段有重疊或首尾相接(例如 [1, 3] 與 [3, 5])就視為同一段忙碌時間。

    請把時段合併後,依開始時間印出每段忙碌時間,最後印出總共佔用幾小時。

    資料(hard code 於程式中,順序是亂的):

    slots = [[9, 11], [1, 3], [2, 4], [13, 14], [10, 12], [4, 5]]

    輸出格式(每段一行,最後一行是總時數):

    開始 ~ 結束

    佔用時數: (時數)

    作答登入後可作答