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
相关产品推荐
相关产品推荐

