当前位置: 代码网 > it编程>前端脚本>Python > python中glom用法的实现

python中glom用法的实现

2025年06月04日 Python 我要评论
glomglom 是 python 中一个用于简化嵌套数据结构操作的库,它的核心目标是让开发者以更直观、简洁的方式处理和转换复杂的字典、列表或对象嵌套数据1. 核心功能​(1) 路径式数据访问​无需多

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

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

2. 主要应用场景​

​(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)
# 输出:{'full_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中glom用法的实现的文章就介绍到这了,更多相关python glom用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com