From 3b1f2ced67032614d6dfd8f4b8a83043fd89328a Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 24 Apr 2018 10:30:29 -0700 Subject: [PATCH] Updated README.rst and set `list` as default output --- README.rst | 90 ++++++++++++++++++++++++---------- nested_lookup/nested_lookup.py | 10 ++-- 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/README.rst b/README.rst index cd427ec..3ecd8e0 100644 --- a/README.rst +++ b/README.rst @@ -43,49 +43,85 @@ 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 + 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', - }, - }, + 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, - ) + results = nested_lookup( + key = 'mail', + 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'} - print(results) - ['test1@example.com', 'test2@example.com', 'test3@example.com'] - misc ======== -:license: +:license: * Public Domain -:authors: +:authors: * Russell Ballestrini * Douglas Miranda -:web: +:web: * http://russell.ballestrini.net * http://douglasmiranda.com * https://gist.github.com/douglasmiranda/5127251 - diff --git a/nested_lookup/nested_lookup.py b/nested_lookup/nested_lookup.py index 6e2f368..645b657 100644 --- a/nested_lookup/nested_lookup.py +++ b/nested_lookup/nested_lookup.py @@ -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):