Updated README.rst and set list as default output

This commit is contained in:
Guillaume 2018-04-24 10:30:29 -07:00
parent dfc2483e3e
commit 3b1f2ced67
2 changed files with 67 additions and 33 deletions

View file

@ -43,15 +43,15 @@ tutorial
[42, 69]
wild
========
wild
========
We also have a `wild` mode that treats the given `key` as a case insensitive
substring of all the keys in the document and returns any values which match.
We also have a `wild` mode that treats the given `key` as a case insensitive
substring of all the keys in the document and returns any values which match.
For example:
For example:
.. code-block:: python
.. code-block:: python
from nested_lookup import nested_lookup
@ -66,14 +66,51 @@ For example:
results = nested_lookup(
key = 'mail',
document = my_document
wild = True,
document = my_document,
wild = True
)
print(results)
['test1@example.com', 'test2@example.com', 'test3@example.com']
output
========
There are two `output` modes:
- `list`: the function returns a list of values corresponding to the
matched keys.
- `dict`: the function returns a `dict` with the matched keys as keys and
their corresponding values as values.
For example:
.. 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',
},
},
results = nested_lookup(
key = 'mail',
document = my_document,
wild = True,
output = 'dict'
)
print(results)
{'email_address': 'test1@example.com',
'secondary_email': 'test2@example.com',
'EMAIL_RECOVERY': 'test3@example.com'}
misc
========
@ -88,4 +125,3 @@ misc
* http://russell.ballestrini.net
* http://douglasmiranda.com
* https://gist.github.com/douglasmiranda/5127251

View file

@ -1,15 +1,13 @@
from six import iteritems
def nested_lookup(key, document, wild=False, output='dict'):
def nested_lookup(key, document, wild=False, output='list'):
"""Lookup a key in a nested document, return a list of values"""
if output == 'dict':
return dict(_nested_lookup(key, document, wild=wild, output=output))
elif output == 'list':
return list(_nested_lookup(key, document, wild=wild, output=output))
else:
raise ValueError('Output is of unknown type '+output)
return list(_nested_lookup(key, document, wild=wild, output=output))
def _nested_lookup(key, document, wild=False, output='dict'):
def _nested_lookup(key, document, wild=False, output='list'):
"""Lookup a key in a nested document, yield a value"""
if isinstance(document, list):
for d in document:
@ -21,7 +19,7 @@ def _nested_lookup(key, document, wild=False, output='dict'):
if key == k or (wild and key.lower() in k.lower()):
if output == 'dict':
yield k, v
elif output == 'list':
else:
yield v
elif isinstance(v, dict):
for result in _nested_lookup(key, v, wild=wild, output=output):