开发者

python中glom用法的实现

目录
  • glom
    • 1. 核python心功能​
      • (1) 路径式数据访问​
      • (2) 数据转换与结构重组​
      • (3) 容错处理​
    • 2. 主要应用场景​
      • ​(1) 处理 API 响应​
      • (2) 数据清洗​
      • (3) 复杂对象操作​
    • 3. 高级特性​
      • ​(1) 类型处理(T 构造器)
      • (2) 迭代与映射处理​
      • (3) 条件过滤​
    • 4. 对比传统方法

    glom

    glom 是 python 中一个用于简化嵌套数据结构操作的库,它的核心目标是让开发者以更直观、简洁的方式处理和转换复杂的字典、列表或对象嵌套数据

    1. 核心功能​

    (1) 路径式数据访问​

    无需多层嵌套的 get() 或循环,直接通过路径表达式访问深层数据

    from glom import glom
    
    data = {
        "user": {
            "name": "Alice",
            "address": {
                "city": "Shanghai",
                "zip": 200000
            }
        }
    }
    # 传统方式:多层 get() 或键访问
    city = data["user"]["address"]["city"]
    # glom 方式:路径表达式
    city = glom(data, "user.address.city")  # 输出 "Shanghai"
    

    (2) 数据转换与结构重组​

    将原始数据按需转换为新的结构

    target_spec = {
        "username": "user.name",
        "location": ("user.address.city", str.upper)  # 对值进行处理
    }
    
    result = glom(data, target_spec)
    # 输出:{'username': 'Alice', 'location': 'SHANGHAI'}
    

    (3) 容错处理​

    自动处理路径缺失或异常,避免 KeyError 或 TypeError

    from glom import Coalesce
    
    # 如果javascript路径不存在,返回默认值
    result = glom(data, Coalesce("user.age", default=18))
    

    2javascript. 主要应用场景​

    ​(1) 处理 API 响应​

    简化 jsON 数据的提取和转换

    api_response = {
        "data": {
            "items": [
                {"id": 1, "title": "Item 1"},
                {"id": 2, "title": "Item 2"}
            ]
        }
    }
    # 提取所有标题
    titles = glom(api_response, ("data.items", ["title"]))
    # 输出:['Item 1', 'Item 2']
    

    (2) 数据清洗​

    将原始数据转换为规范化的结构

    raw_data = {
        "name": "Bob",
        "details": {"age": 30, "email": "bob@example.com"}
    }
    
    spec = {
        "full_name": "name",
        "contact": "details.email",
        "metadata": ("details", {"age": "age"})
    }
    
    cleaned = glom(raw_data, spec)
    # 输出:{'fullvjjxSwI_name': 'Bob', 'contact': 'bob@example.com', 'metadata': {'age': 30}}
    

    (3) 复杂对象操作​

    处理嵌套对象属性(如 ORM 模型、类实例)

    class User:
        def __init__(self, name, profile):
            self.name = name
            self.profile = profile
    
    class Profile:
        def __init__(self, level):
            self.level = level
    user = User("Charlie", Profile(5))
    level = glom(user, "profile.level")  # 输出 5
    

    3. 高级特性​

    ​(1) 类型处理(T 构造器)

    ​​在路径中直接调用类型方法

    from glom import T
    
    data = {"value": "123"}
    result = glom(data, ("value", T(int)))  # 输出 123(字符串转整数)
    

    (2) 迭代与映射处理​

    批量处理列表或字典中的元素

    data = {"numbers": [1, 2, 3]}
    spec = ("numbers", [lambda x: x * 2])
    result = glom(data, spec)  # 输出 [2, 4, 6]
    

    (3) 条件过滤​

    结合 Check 或 Match 实现条件逻辑

    from glom import Check, Match
    
    data = {"scores": [85, 92, 78, 60]}
    spec = ("scores", [Check(lambda x: x >= 90, default=None)])
    result = glom(data, spec)  # 输出 [92]
    

    4. 对比传统方法

    操作​​传统代码​​glom 代码​
    提取嵌套字段data.get(‘a’, {}).get(‘b’, {}).get(‘c’)glom(data, ‘a.b.c’)
    转换列表元素[x[‘val’]*2 for x in data[‘items’]]glom(data, (‘items’, [‘val’], lambda x: x*2))
    容错处理多层 try-except 或 if-else 嵌套glom(data, Coalesce(‘path’, default=0))

    到此这篇关于python中gjslom用法的实现的文章就介绍到这了,更多相关python glom用法内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜