Python如何将响应对象custom_fields映射为Typescript易消费的结构化数据
可选实现方案
1. 列表推导式+字典推导式(最简洁Pythonic写法)
可以把嵌套循环直接写成推导式,无需显式声明空列表和append操作:
if __name__ == "__main__": import enum class FieldEnum(enum.IntEnum): ORDER_ID = 360018501198 DATE = 1900000084913 NAME = 360023508598 r_obj = [ { 'custom_fields': [ {'id': 360018501198, 'value': '5678'}, {'id': 360023508598, 'value': 'Jim'}, {'id': 1900000084913, 'value': '2021-09-03'} ] }, { 'custom_fields': [ {'id': 360018501198, 'value': '1234'}, {'id': 360023508598, 'value': 'Bob'}, {'id': 1900000084913, 'value': '2021-09-03'} ] } ] # 核心推导式逻辑 out = [{FieldEnum(f['id']).name.lower(): f['value'] for f in entry['custom_fields']} for entry in r_obj] print(out)
输出和现有代码完全一致。
2. 增加异常兼容的写法
如果接口返回的custom_fields可能出现不在枚举定义里的id,可以增加过滤逻辑避免报错:
out = [] for entry in r_obj: item = {} for f in entry['custom_fields']: try: key = FieldEnum(f['id']).name.lower() item[key] = f['value'] except ValueError: # 忽略未定义的字段id,也可以按需求打日志 continue out.append(item)
3. 封装为可复用函数
如果多处需要用到这个转换逻辑,可以单独封装函数,后续维护更方便:
def convert_custom_fields(entry: dict, enum_cls: enum.IntEnum) -> dict: return {enum_cls(f['id']).name.lower(): f['value'] for f in entry['custom_fields']} # 调用 out = [convert_custom_fields(entry, FieldEnum) for entry in r_obj]
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

