The pytoolz/cytoolz project already has this:
https://toolz.readthedocs.io/en/latest/api.html#toolz.dicttoolz.get_in
On Sun, May 23, 2021, 11:44 Chris Angelico
On Mon, May 24, 2021 at 1:24 AM MRAB
wrote: Also, if the first lookup returns a list or a tuple, and an argument can be an index of that list, would be make sense to add a similar method to lists and tuples?
Or, better: make it a stand-alone function, not a method of anything. Although that kinda takes it out of python-ideas territory because it could easily be a personal library function instead:
_sentinel = object() # or see other proposals def get_deep(obj, *keys, default=_sentinel): if len(keys) == 1: keys = list(keys[0]) try: for key in keys: obj = obj[key] except (LookupError, TypeError): # the OP did include TypeError if default is not _sentinel: return default raise return obj
Done. Personally, I'd just go with "except LookupError:", but this is another advantage of personal library functions: you don't have to bikeshed them with everyone else :)
ChrisA _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/YM6KCR... Code of Conduct: http://python.org/psf/codeofconduct/