You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API返回数据中课程类型、科目及在线学习类型映射问题求助

解决方案:DAAD API课程数据处理问题

1. courseType数值映射

直接利用字典的get()方法完成映射,同时天然支持无匹配场景的兜底:

course_type_mapping = {
    1: "硕士课程",
    2: "博士课程",
    # 补充你的映射键值对
}

def map_course_type(course_type_id):
    return course_type_mapping.get(course_type_id, "未知课程类型")

# 使用示例
course_data["courseType"] = map_course_type(course_data["courseType"])

2. typeOfElearning字段ID映射

DAAD的typeOfElearning ID对应线上学习模式的标准分类,常见映射如下(如果有官方文档可替换为官方定义):

elearning_mapping = {
    0: "无线上学习",
    1: "纯线上课程",
    2: "混合式学习(线上+线下)",
    3: "部分内容线上"
}

def map_elearning_type(elearning_id):
    return elearning_mapping.get(elearning_id, f"未知类型(ID:{elearning_id})")

# 使用示例
course_data["typeOfElearning"] = map_elearning_type(course_data["typeOfElearning"])

若不确定ID含义,可通过DAAD API的元数据接口获取官方映射表,或直接保留原ID并标注未知。

3. subjectId映射主/子科目

假设subject_mapping是嵌套结构(key为subjectId,值包含主、子科目信息),用嵌套get()实现分层映射:

subject_mapping = {
    "100": {"main_subject": "工程学", "sub_subject": "机械工程"},
    "101": {"main_subject": "自然科学", "sub_subject": "物理学"},
    # 补充你的映射数据
}

def map_subject(subject_id):
    subject_info = subject_mapping.get(subject_id, {})
    return {
        "main_subject": subject_info.get("main_subject", "未知主科目"),
        "sub_subject": subject_info.get("sub_subject", "未知子科目")
    }

# 使用示例
subject_details = map_subject(course_data["subjectId"])
course_data["main_subject"] = subject_details["main_subject"]
course_data["sub_subject"] = subject_details["sub_subject"]

4. 无匹配项的处理

统一用字典get()方法的默认值参数处理,可选择两种策略:

  • 友好兜底:返回"未知"或带原ID的说明,避免数据中断
  • 告警排查:抛出警告记录未匹配项,方便后续补全映射表
import warnings

def map_course_type(course_type_id):
    if course_type_id not in course_type_mapping:
        warnings.warn(f"未匹配的courseType ID: {course_type_id}")
    return course_type_mapping.get(course_type_id, "未知课程类型")

日期与成本格式统一

日期格式处理

用datetime模块解析多格式日期,转为统一的YYYY-MM-DD格式:

from datetime import datetime

def standardize_date(date_str):
    # 补充DAAD API返回的常见日期格式
    date_formats = ["%d.%m.%Y", "%Y-%m-%d", "%B %d, %Y"]
    for fmt in date_formats:
        try:
            return datetime.strptime(date_str, fmt).strftime("%Y-%m-%d")
        except ValueError:
            continue
    return "无效日期"

# 使用示例
course_data["start_date"] = standardize_date(course_data["start_date"])

成本格式处理

用正则提取数字,统一货币单位(以欧元为例):

import re

def standardize_cost(cost_str):
    # 提取数字(支持小数)
    num_match = re.search(r"\d+(\.\d+)?", cost_str)
    if num_match:
        amount = float(num_match.group())
        # 可根据实际数据添加货币判断逻辑
        return f"{amount:.2f} EUR"
    return "无成本信息"

# 使用示例
course_data["cost"] = standardize_cost(course_data["cost"])

内容的提问来源于stack exchange,提问作者Kuldeep Sonara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:50:02