NestedFetch
Syntactic sugar inspired by XPath to GET, SET, UPDATE and FLATTEN values from nested dictionaries and nested lists.
Install / Use
/learn @saintlyzero/NestedFetchREADME
ℕ𝕖𝕤𝕥𝕖𝕕𝔽𝕖𝕥𝕔𝕙
Outline
Overview
- NestedFetch provides syntactic sugar 🍬 inspired by XPath to deal with a nested python
dictionaryor a nestedlist🐍 - You can
get,set,updateandflattenvalues from a deeply nested dictionary or a list with a more concise, easier and aKeyError,IndexErrorfree way 😌
data = {
"league": "Champions League",
"matches": [
{
"match_id": "match_1",
"goals": [
{
"time": 13,
"scorrer": "Lionel Messi",
"assist": "Luis Suarez"
},
{
"time": 78,
"scorrer": "Luis Suarez",
"assist": "Ivan Rakitic"
}]
},
{
"match_id": "match_2",
"goals": [
{
"time": 36,
"scorrer": "C. Ronaldo",
"assist": "Luka Modric"
}]
}]
}
|
|
|
|--|--|
|
|
Installation
NestedFetch works with Python3. <br>You can directly install it via pip<br>
$ pip3 install nestedfetch
Usage
Import the methods from the package.
from nestedfetch import nested_get, nested_set, flatten_data
No need to instantiate any object, just use the methods specifying valid parameters.
Examples
Fetch Data
nested_get(data, keys, default=None, flatten=False)
@Arguments
data : dict / list
keys => List of sequential keys leading to the desired value to fetch
default => Specifies the default value to be returned if any specified key is not present. If not specified, it will be None
flatten => Specifies whether to flatten the returned value
@Return
Returns the fetched value if it exists, or returns specified default value
- Fetch simple nested data :
data = {
'name': 'Jesse Pinkman',
'details': {
'address':{
'city': 'Albuquerque'
}
}
}
res = nested_get(data,['details','address','city'])
# res = Albuquerque
- Fetch simple nested data with
defaultvalue:
data = {
'name': 'Jesse Pinkman',
'details': {
'address':{
'city': 'Albuquerque'
}
}
}
res = nested_get(data,['details','address','state'], default=-1)
# res = -1
- Fetch nested data:
data = {
'name': 'Jesse Pinkman',
'details': {
'address':[{
'city': 'Albuquerque'
},{
'city': 'El Paso'
}]
}
}
res = nested_get(data,['details','address','city'])
# res = ['Albuquerque','El Paso']
- Fetch nested data with
defaultvalue:
data = {
'name': 'Jesse Pinkman',
'details': {
'address':[{
'city': 'Albuquerque'
},{
'city': 'El Paso'
},{
'state': 'New Mexico'
}]
}
}
res = nested_get(data,['details','address','city'], default= None)
# res = ['Albuquerque','El Paso', None]
- Fetch nested data by specifing
index:
data = {
'name': 'Walter White',
'details': {
'address':[{
'city': 'Albuquerque'
},{
'city': 'El Paso'
}]
}
}
res = nested_get(data,['details','address','city', 0])
# res = Albuquerque
- Fetch nested data without
flatten:
data = {
"league": "Champions League",
"matches": [
{
"match_id": "match_1",
"goals": [
{
"time": 13,
"scorrer": "Lionel Messi",
"assist": "Luis Suarez"
},
{
"time": 78,
"scorrer": "Luis Suarez",
"assist": "Ivan Rakitic"
}]
},
{
"match_id": "match_2",
"goals": [
{
"time": 36,
"scorrer": "C. Ronaldo",
"assist": "Luka Modric"
}]
}]
}
res = nested_get(data,['matches','goals','scorrer'])
# res = [['Lionel Messi', 'Luis Suarez'], ['C. Ronaldo']]
- Fetch nested data with
flatten:
data = {
"league": "Champions League",
"matches": [
{
"match_id": "match_1",
"goals": [
{
"time": 13,
"scorrer": "Lionel Messi",
"assist": "Luis Suarez"
},
{
"time": 78,
"scorrer": "Luis Suarez",
"assist": "Ivan Rakitic"
}]
},
{
"match_id": "match_2",
"goals": [
{
"time": 36,
"scorrer": "C. Ronaldo",
"assist": "Luka Modric"
}]
}]
}
res = nested_get(data,['matches','goals','scorrer'], flatten=True)
# res = ['Lionel Messi', 'Luis Suarez', 'C. Ronaldo']
Set / Update Data
nested_set(data, keys, value, create_missing=False):
@Arguments
data => dict / list
keys => List of sequential keys leading to the desired value to set / update
value => Specifies the value to set / update
create_missing => Specifies whether to create new key while building up if the specified key does not exists
@Return
Returns the number of values updated
- Update value of simple nested data :
data = {
'name': 'Jesse Pinkman',
'details': {
'address':{
'city': 'Albuquerque'
}
}
}
res = nested_set(data,['details','address','city'], "Denver")
# res = 1
# data = {
# 'name': 'Jesse Pinkman',
# 'details': {
# 'address':{
# 'city': 'Denver'
# }
# }
# }
- Update nested data:
data = {
'name': 'Jesse Pinkman',
'details': {
'address':[{
'city': 'Albuquerque'
},{
'city': 'El Paso'
}]
}
}
res = nested_set(data,['details','address','city'], "Denver")
# res = 2
# data = {
# 'name': 'Jesse Pinkman',
# 'details': {
# 'address':[{
# 'city': 'Denver'
# },{
# 'city': 'Denver'
# }]
# }
# }
- Update nested data with
index:
data = {
'name': 'Jesse Pinkman',
'details': {
'address':[{
'city': 'Albuquerque'
},{
'city': 'El Paso'
}]
}
}
res = nested_set(data,['details','address',0,'city'], "Denver")
# res = 1
# data = {
# 'name': 'Jesse Pinkman',
# 'details': {
# 'address':[{
# 'city': 'Denver'
# },{
# 'city': 'El Paso'
# }]
# }
# }
- Set nested data with
create_missing:
data = {
'name': 'Jesse Pinkman',
'details': {
'address':{
'city': 'Albuquerque'
}
}
}
res = nested_set(data,['details','address','state'], "New Mexico", create_missing=True)
# res = 1
# data = {
# 'name': 'Jesse Pinkman',
# 'details': {
# 'address':{
# 'city': 'Denver',
# 'state': 'New Mexico'
# }
# }
# }
Flatten Nested Lists
flatten_data(data):
@Arguments
data => list of list
@Return
Returns the flattened list
- Flatten List of Lists
data = [[
['This','is'],
['flattened', 'data']
]]
res = flatten_data(data)
# res = ['This','is','flattened','data']
How to contribute
Contributions are welcome 😇.<br>Feel free to submit a patch, report a bug 🐛 or ask for a feature 🐣. <br>Please open an issue first to encourage and keep track of potential discussions 📝.
Related Skills
node-connect
352.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
