文章目录
-
- 无需多层嵌套的 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”
- 将原始数据按需转换为新的结构 target_spec = { “username”: “user.name”, “location”: (“user.address.city”, str.upper) # 对值进行处理 } result = glom(data, target_spec) # 输出:{‘username’: ‘Alice’, ‘location’: ‘SHANGHAI’}
- 自动处理路径缺失或异常,避免 KeyError 或 TypeError from glom import Coalesce # 如果路径不存在,返回默认值 result = glom(data, Coalesce(“user.age”, default=18))
-
- 简化 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’]
- 将原始数据转换为规范化的结构 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}}
- 处理嵌套对象属性(如 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
-
- 在路径中直接调用类型方法 from glom import T data = {“value”: “123”} result = glom(data, (“value”, T(int))) # 输出 123(字符串转整数)
- 批量处理列表或字典中的元素 data = {“numbers”: [1, 2, 3]} spec = (“numbers”, [lambda x: x * 2]) result = glom(data, spec) # 输出 [2, 4, 6]
- 结合 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]
- 操作 传统代码 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用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python glom模块的使用简介
目录
- glom
- 1. 核心功能
- (1) 路径式数据访问
- (2) 数据转换与结构重组
- (3) 容错处理
- 2. 主要应用场景
- (1) 处理 API 响应
- (2) 数据清洗
- (3) 复杂对象操作
- 3. 高级特性
- (1) 类型处理(T 构造器)
- (2) 迭代与映射处理
- (3) 条件过滤
- 4. 对比传统方法
glom 是 Python 中一个用于简化嵌套数据结构操作的库,它的核心目标是让开发者以更直观、简洁的方式处理和转换复杂的字典、列表或对象嵌套数据
glom 是 Python 中一个用于简化嵌套数据结构操作的库,它的核心目标是让开发者以更直观、简洁的方式处理和转换复杂的字典、列表或对象嵌套数据
无需多层嵌套的 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"
将原始数据按需转换为新的结构
target_spec = {
"username": "user.name",
"location": ("user.address.city", str.upper) # 对值进行处理
}
result = glom(data, target_spec)
# 输出:{'username': 'Alice', 'location': 'SHANGHAI'}
自动处理路径缺失或异常,避免 KeyError 或 TypeError
from glom import Coalesce
# 如果路径不存在,返回默认值
result = glom(data, Coalesce("user.age", default=18))
简化 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']
将原始数据转换为规范化的结构
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}}
处理嵌套对象属性(如 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
在路径中直接调用类型方法
from glom import T
data = {"value": "123"}
result = glom(data, ("value", T(int))) # 输出 123(字符串转整数)
批量处理列表或字典中的元素
data = {"numbers": [1, 2, 3]}
spec = ("numbers", [lambda x: x * 2])
result = glom(data, spec) # 输出 [2, 4, 6]
结合 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]
| 操作 | 传统代码 | 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用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- python glom模块的使用简介