Skip to main content

Python functions for working with deeply nested documents (lists and dicts)

Project description

https://img.shields.io/badge/pypi-0.2.12-green.svg

Make working with JSON, YAML, and XML document responses fun again!

The nested_lookup package provides many Python functions for working with deeply nested documents. A document in this case is a a mixture of Python dictionary and list objects typically derived from YAML or JSON.

nested_lookup:
Perform a key lookup on a deeply nested document. Returns a list of matching values.
nested_update:
Given a document, find all occurences of the given key and update the value. By default, returns a copy of the document. To mutate the original specify the in_place=True argument.
nested_delete:
Given a document, find all occurrences of the given key and delete it. By default, returns a copy of the document. To mutate the original specify the in_place=True argument.
get_all_keys:
Fetch all keys from a deeply nested dictionary. Returns a list of keys.
get_occurrence_of_key/get_occurrence_of_value:
Returns the number of occurrences of a key/value from a nested dictionary.

For example function invocations, plesae see the tutorial.

install

install from pypi using pip:

pip install nested-lookup

or easy_install:

easy_install nested-lookup

or install from source using:

git clone https://github.com/russellballestrini/nested-lookup.git
cd nested-lookup
pip install .

quick tutorial

>>> from nested_lookup import nested_lookup

>>> document = [ { 'taco' : 42 } , { 'salsa' : [ { 'burrito' : { 'taco' : 69 } } ] } ]

>>> print(nested_lookup('taco', document))
[42, 69]

>>> from nested_lookup import nested_update, nested_delete

>>> nested_update(document, key='burrito', value='Test')
[{'taco': 42}, {'salsa': [{'burrito': 'Test'}]}]

>>> nested_delete(document, 'taco')
[{}, {'salsa': [{'burrito': {}}]}]

>>> from nested_lookup import get_all_keys

>>> get_all_keys(document)
['taco', 'salsa', 'burrito', 'taco']

>>> from nested_lookup import get_occurrence_of_key, get_occurrence_of_value

>>> get_occurrence_of_key(document, key='taco')
2

>>> get_occurrence_of_value(document, value='42')
1

longer tutorial

You may control the function’s behavior by passing some optional arguments.

wild (defaults to False):
if wild is True, treat the given key as a case insensitive substring when performing lookups.
with_keys (defaults to False):
if with_keys is True, return a dictionary of all matched keys and a list of values.

For example, given the following document:

from nested_lookup import nested_lookup

my_document = {
   'name' : 'Russell Ballestrini',
   'email_address' : 'test1@example.com',
   'other' : {
       'secondary_email' : 'test2@example.com',
       'EMAIL_RECOVERY' : 'test3@example.com',
       'email_address' : 'test4@example.com',
    },
},

Next, we could act wild and find all the email addresses like this:

results = nested_lookup(
    key = 'mail',
    document = my_document,
    wild = True
)

print(results)
['test1@example.com', 'test4@example.com', 'test2@example.com', 'test3@example.com']

Additionally, if you also needed the matched key names, you could do this:

results = nested_lookup(
    key = 'mail',
    document = my_document,
    wild = True,
    with_keys = True,
)

print(results)
{
 'email_address': ['test1@example.com', 'test4@example.com'],
 'secondary_email': ['test2@example.com'],
 'EMAIL_RECOVERY': ['test3@example.com']
}

To Get / Delete / Update a key->value pair in nested document

from nested_lookup import nested_update, nested_delete

result = nested_delete(my_document, 'EMAIL_RECOVERY')

print(result)  # result => {'other': {'secondary_email': 'test2@example.com', 'email_address': 'test4@example.com'}, 'email_address': 'test1@example.com', 'name': 'Russell Ballestrini'}

result = nested_update(my_document, key='other', value='Test')

print(result)  # result => {'other': 'Test', 'email_address': 'test1@example.com', 'name': 'Russell Ballestrini'}

To get a list of every nested key in a document, run this:

from nested_lookup import get_all_keys

keys = get_all_keys(my_document)

print(keys)
['name', 'email_address', 'other', 'secondary_email', 'EMAIL_RECOVERY', 'email_address']

To get the number of occurrence of the given key/value

from nested_lookup import get_occurrence_of_key, get_occurrence_of_value

no_of_key_occurrence = get_occurrence_of_key(my_document, key='email_address')

print(no_of_key_occurrence)  # result => 2

no_of_value_occurrence = get_occurrence_of_value(my_document, value='test2@example.com')

print(no_of_value_occurrence)  # result => 1

misc

license:
  • Public Domain
authors:
  • Russell Ballestrini
  • Douglas Miranda
  • Ramesh RV
web:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
nested_lookup-0.2.12-py2.7.egg (7.8 kB) Copy SHA256 hash SHA256 Egg 2.7
nested-lookup-0.2.12.tar.gz (4.9 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page