- 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"
}]
}]
}![]() | ![]() |
|---|---|
![]() | ![]() |
NestedFetch works with Python3.
You can directly install it via pip
$ pip3 install nestedfetchImport the methods from the package.
fromnestedfetchimportnested_get, nested_set, flatten_dataNo need to instantiate any object, just use the methods specifying valid parameters.
nested_get(data, keys, default=None, flatten=False)
@Argumentsdata : dict/listkeys=>Listofsequentialkeysleadingtothedesiredvaluetofetchdefault=>Specifiesthedefaultvaluetobereturnedifanyspecifiedkeyisnotpresent. Ifnotspecified, itwillbeNoneflatten=>Specifieswhethertoflattenthereturnedvalue
@ReturnReturnsthefetchedvalueifitexists, orreturnsspecifieddefaultvalue- 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']nested_set(data, keys, value, create_missing=False):
@Argumentsdata=>dict/listkeys=>Listofsequentialkeysleadingtothedesiredvaluetoset/updatevalue=>Specifiesthevaluetoset/updatecreate_missing=>Specifieswhethertocreatenewkeywhilebuildingupifthespecifiedkeydoesnotexists
@ReturnReturnsthenumberofvaluesupdated- 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_data(data):
@Argumentsdata=>listoflist@ReturnReturnstheflattenedlist- Flatten List of Lists
data= [[
['This','is'],
['flattened', 'data']
]]
res=flatten_data(data)
# res = ['This','is','flattened','data']Contributions are welcome 😇.
Feel free to submit a patch, report a bug 🐛 or ask for a feature 🐣.
Please open an issue first to encourage and keep track of potential discussions 📝.



