Skip to content

Repository files navigation

ℕ𝕖𝕤𝕥𝕖𝕕𝔽𝕖𝕥𝕔𝕙

Build StatusGitHubPyPI - Python Version

Outline

  1. Overview
  2. Installation
  3. Usage
  4. Examples
    1. Fetch Value
    2. Set Value
    3. Flatten Nested Lists
  5. How to Contribute

Overview

  • NestedFetch provides syntactic sugar 🍬 inspired by XPath to deal with a nested python dictionary or a nested list 🐍
  • You can get, set, update and flatten values from a deeply nested dictionary or a list with a more concise, easier and a KeyError, IndexError free 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"
}]
}]
}
No Facenormal code
Yes FaceNestedFetch code

Installation

NestedFetch works with Python3.
You can directly install it via pip

$ pip3 install nestedfetch

Usage

Import the methods from the package.

fromnestedfetchimportnested_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)
@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 default value:
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 default value:
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):
@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 Nested Lists

flatten_data(data):
@Argumentsdata=>listoflist@ReturnReturnstheflattenedlist
  • Flatten List of Lists
data= [[
['This','is'],
['flattened', 'data']
]]
res=flatten_data(data)
# res = ['This','is','flattened','data']

How to contribute

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 📝.

About

Syntactic sugar inspired by XPath to GET, SET, UPDATE and FLATTEN values from nested dictionaries and nested lists.

Topics

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages