python中g(shù)lom用法的實(shí)現(xiàn)
glom
glom 是 Python 中一個(gè)用于簡(jiǎn)化嵌套數(shù)據(jù)結(jié)構(gòu)操作的庫(kù),它的核心目標(biāo)是讓開發(fā)者以更直觀、簡(jiǎn)潔的方式處理和轉(zhuǎn)換復(fù)雜的字典、列表或?qū)ο笄短讛?shù)據(jù)
1. 核心功能?
(1) 路徑式數(shù)據(jù)訪問(wèn)?
無(wú)需多層嵌套的 get() 或循環(huán),直接通過(guò)路徑表達(dá)式訪問(wèn)深層數(shù)據(jù)
from glom import glom
data = {
"user": {
"name": "Alice",
"address": {
"city": "Shanghai",
"zip": 200000
}
}
}
# 傳統(tǒng)方式:多層 get() 或鍵訪問(wèn)
city = data["user"]["address"]["city"]
# glom 方式:路徑表達(dá)式
city = glom(data, "user.address.city") # 輸出 "Shanghai"
(2) 數(shù)據(jù)轉(zhuǎn)換與結(jié)構(gòu)重組?
將原始數(shù)據(jù)按需轉(zhuǎn)換為新的結(jié)構(gòu)
target_spec = {
"username": "user.name",
"location": ("user.address.city", str.upper) # 對(duì)值進(jìn)行處理
}
result = glom(data, target_spec)
# 輸出:{'username': 'Alice', 'location': 'SHANGHAI'}
(3) 容錯(cuò)處理?
自動(dòng)處理路徑缺失或異常,避免 KeyError 或 TypeError
from glom import Coalesce
# 如果路徑不存在,返回默認(rèn)值
result = glom(data, Coalesce("user.age", default=18))
2. 主要應(yīng)用場(chǎng)景?
?(1) 處理 API 響應(yīng)?
簡(jiǎn)化 JSON 數(shù)據(jù)的提取和轉(zhuǎn)換
api_response = {
"data": {
"items": [
{"id": 1, "title": "Item 1"},
{"id": 2, "title": "Item 2"}
]
}
}
# 提取所有標(biāo)題
titles = glom(api_response, ("data.items", ["title"]))
# 輸出:['Item 1', 'Item 2']
(2) 數(shù)據(jù)清洗?
將原始數(shù)據(jù)轉(zhuǎn)換為規(guī)范化的結(jié)構(gòu)
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) 復(fù)雜對(duì)象操作?
處理嵌套對(duì)象屬性(如 ORM 模型、類實(shí)例)
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. 高級(jí)特性?
?(1) 類型處理(T 構(gòu)造器)
??在路徑中直接調(diào)用類型方法
from glom import T
data = {"value": "123"}
result = glom(data, ("value", T(int))) # 輸出 123(字符串轉(zhuǎn)整數(shù))
(2) 迭代與映射處理?
批量處理列表或字典中的元素
data = {"numbers": [1, 2, 3]}
spec = ("numbers", [lambda x: x * 2])
result = glom(data, spec) # 輸出 [2, 4, 6]
(3) 條件過(guò)濾?
結(jié)合 Check 或 Match 實(shí)現(xiàn)條件邏輯
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. 對(duì)比傳統(tǒng)方法
| 操作? | ?傳統(tǒng)代碼? | ?glom 代碼? |
|---|---|---|
| 提取嵌套字段 | data.get(‘a’, {}).get(‘b’, {}).get(‘c’) | glom(data, ‘a.b.c’) |
| 轉(zhuǎn)換列表元素 | [x[‘val’]*2 for x in data[‘items’]] | glom(data, (‘items’, [‘val’], lambda x: x*2)) |
| 容錯(cuò)處理 | 多層 try-except 或 if-else 嵌套 | glom(data, Coalesce(‘path’, default=0)) |
到此這篇關(guān)于python中g(shù)lom用法的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python glom用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中join()函數(shù)多種操作代碼實(shí)例
這篇文章主要介紹了Python中join()函數(shù)多種操作代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Python實(shí)現(xiàn)簡(jiǎn)易超市管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)簡(jiǎn)易超市管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
Python基于lxml模塊解析html獲取頁(yè)面內(nèi)所有葉子節(jié)點(diǎn)xpath路徑功能示例
這篇文章主要介紹了Python基于lxml模塊解析html獲取頁(yè)面內(nèi)所有葉子節(jié)點(diǎn)xpath路徑功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python使用lxml模塊進(jìn)行xml節(jié)點(diǎn)數(shù)據(jù)解析的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05
VSCode配置Anaconda Python環(huán)境的實(shí)現(xiàn)
VisualStudioCode中可以使用Anaconda環(huán)境進(jìn)行Python開發(fā),本文主要介紹了VSCode配置Anaconda Python環(huán)境的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Python基礎(chǔ)教程之元組的定義與不可變特性(對(duì)比列表)
元組的魅力在于它的簡(jiǎn)單性和明確性,它不追求成為全能數(shù)據(jù)結(jié)構(gòu),而是專注于做好一件事,就是提供不可變的有序集合,這篇文章主要介紹了Python基礎(chǔ)教程之元組的定義與不可變特性(對(duì)比列表)的相關(guān)資料,需要的朋友可以參考下2026-05-05
利用Python解決Excel問(wèn)題的最佳方案總結(jié)
python處理excel文件有很多方法,最開始接觸的是xlrd、xlsxwriter模塊,分別用于excel文件的讀、寫,后來(lái)又學(xué)習(xí)了openpyxl模塊,可以同時(shí)完成excel文件的讀、寫,下面這篇文章主要給大家介紹了關(guān)于利用Python解決Excel問(wèn)題的最佳方案,需要的朋友可以參考下2023-04-04
python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法
今天小編就為大家分享一篇python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python實(shí)現(xiàn)全角半角字符互轉(zhuǎn)的方法
大家都知道在自然語(yǔ)言處理過(guò)程中,全角、半角的的不一致會(huì)導(dǎo)致信息抽取不一致,因此需要統(tǒng)一。這篇文章通過(guò)示例代碼給大家詳細(xì)的介紹了Python實(shí)現(xiàn)全角半角字符互轉(zhuǎn)的方法,有需要的朋友們可以參考借鑒,下面跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11

