nested-lookup/README.rst
Ramesh RV 4564f8ed80 New Features (nested_update, nested_delete) (#12)
* Fix for issue #10

* Renamed the test module

* New Features (nested_get, nested_update, nested_delete)

* Update Version to 0.3.0

* Updated Readme for new features

* Removed method (nested_get)

* Addressed review comments

* Removed nested_get references from README

* Rearanged the order of the functions
2018-11-23 19:10:31 -05:00

201 lines
4.9 KiB
ReStructuredText

nested_lookup
#############
.. image:: https://img.shields.io/badge/pypi-0.2.11-green.svg
:target: https://pypi.python.org/pypi/nested-lookup
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 all matches in a `list`. (Please see tutorial for more info)
*nested_delete:*
Returns a document that includes everything but the given key
*nested_update:*
Returns a document that has updated key, value pair
*get_all_keys:*
Fetch all from a nested dictionary. Returns `list` of keys.
*get_occurrence_of_key/get_occurrence_of_value:*
Returns the number of occurrences of a key/value from a nested dictionary.
Make working with JSON, YAML, and XML document responses fun again!
.. contents::
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
==============
.. code-block:: python
>>> from nested_lookup import nested_lookup
>>> document = [ { 'taco' : 42 } , { 'salsa' : [ { 'burrito' : { 'taco' : 69 } } ] } ]
>>> print(nested_lookup('taco', document))
[42, 69]
>>> 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
>>> 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': {}}]}]
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:
.. code-block:: python
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:
.. code-block:: python
results = nested_lookup(
key = 'mail',
document = my_document,
wild = True
)
print(results)
.. code-block:: python
['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:
.. code-block:: python
results = nested_lookup(
key = 'mail',
document = my_document,
wild = True,
with_keys = True,
)
print(results)
.. code-block:: python
{
'email_address': ['test1@example.com', 'test4@example.com'],
'secondary_email': ['test2@example.com'],
'EMAIL_RECOVERY': ['test3@example.com']
}
To get a list of every nested key in a document, run this:
.. code-block:: python
from nested_lookup import get_all_keys
keys = get_all_keys(my_document)
print(keys)
.. code-block:: python
['name', 'email_address', 'other', 'secondary_email', 'EMAIL_RECOVERY', 'email_address']
To get the number of occurrence of the given key/value
.. code-block:: python
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
To Get / Delete / Update a key->value pair in nested document
.. code-block:: python
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'}
misc
========
:license:
* Public Domain
:authors:
* Russell Ballestrini
* Douglas Miranda
* Ramesh RV
:web:
* http://russell.ballestrini.net
* http://douglasmiranda.com
* https://gist.github.com/douglasmiranda/5127251