python中g(shù)lom用法的實(shí)現(xiàn)
glom
glom 是 Python 中一個(gè)用于簡(jiǎn)化嵌套數(shù)據(jù)結(jié)構(gòu)操作的庫(kù),它的核心目標(biāo)是讓開(kāi)發(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 模型、類(lèi)實(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) 類(lèi)型處理(T 構(gòu)造器)
??在路徑中直接調(diào)用類(lèi)型方法
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中對(duì)對(duì)象列表進(jìn)行排序的多種方式實(shí)現(xiàn)
在軟件開(kāi)發(fā)中,我們經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行排序以滿足特定的需求,在 Python 中,排序是一個(gè)常見(jiàn)的操作,可以通過(guò)多種方式實(shí)現(xiàn),需要的朋友可以參考下2025-01-01Python的Flask框架Request請(qǐng)求對(duì)象詳解
這篇文章主要介紹了Python的Flask框架Request請(qǐng)求對(duì)象詳解,Flask是一個(gè)輕量級(jí)的基于Python的web框架,使用 method 屬性可以操作當(dāng)前請(qǐng)求方法,通過(guò)使用 form 屬性處理表單數(shù)據(jù),需要的朋友可以參考下2023-08-08python列表操作之extend和append的區(qū)別實(shí)例分析
這篇文章主要介紹了python列表操作之extend和append的區(qū)別,實(shí)例分析了extend方法和append方法使用上的區(qū)別,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07python中sklearn庫(kù)predict及python sklearn linearmodel(
Scikit-learn(sklearn)是機(jī)器學(xué)習(xí)中常用的第三方模塊,對(duì)常用的機(jī)器學(xué)習(xí)方法進(jìn)行了封裝,包括回歸(Regression)、降維(Dimensionality Reduction)、分類(lèi)(Classfication)、聚類(lèi)(Clustering)等方法,今天小編給大家分享python中sklearn庫(kù)predict的問(wèn)題,感興趣的朋友一起看看吧2024-02-02Python如何使用Pandas庫(kù)從Excel文件中提取數(shù)據(jù)
今天我要分享一個(gè)超級(jí)實(shí)用的Python技巧:如何用pandas庫(kù)從Excel文件中提取我們需要的數(shù)據(jù)列,這個(gè)技能在工作中特別有用,比如處理學(xué)生成績(jī)表、客戶名單等Excel數(shù)據(jù)時(shí),可以快速獲取關(guān)鍵信息,需要的朋友可以參考下2025-04-04python實(shí)戰(zhàn)練習(xí)做一個(gè)隨機(jī)點(diǎn)名的程序
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python實(shí)現(xiàn)一個(gè)隨機(jī)點(diǎn)名的程序,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-10-10