Skip to content

Instantly share code, notes, and snippets.

@john2x
Last active December 17, 2015 02:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save john2x/5538099 to your computer and use it in GitHub Desktop.
Save john2x/5538099 to your computer and use it in GitHub Desktop.
inspired by Clojure's get-in function
def getin(d, keys, default=None):
'''
>>> d = {'foo': {'bar': {'baz': 1}}}
>>> getin(d, ['foo', 'bar', 'baz'])
1
>>> getin(d, ['foo', 'bar'])
{'baz': 1}
>>> getin(d, ['foo', 'oops'], default=0)
0
'''
if not keys:
return d
key = keys[0]
if len(keys) == 1:
return d.get(key, default)
res = d.get(key)
if isinstance(res, dict):
return getin(res, keys[1:], default=default)
return default
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment