lookup a key in a deeply nested document of dicts and lists
Project description
A small Python library which enables: 1. key lookups on deeply nested documents. 2. fetching all keys from a nested dictionary.
Documents may be built out of dictionaries (dicts) and/or lists.
Make working with JSON, YAML, and XML document responses fun again!
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 get_all_keys
>>> get_all_keys(document)
['taco', 'salsa', 'burrito', 'taco']
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',
},
},
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']
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']
}
misc
- license:
Public Domain
- authors:
Russell Ballestrini
Douglas Miranda
Ramesh RV
- web:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.