On Sun, 23 May 2021 at 17:22, MRAB <pyt...@mrabarnett.plus.com> wrote: > > On 2021-05-23 13:37, Marco Sulla wrote: > > I propose to add a get_deep(*args, default=_sentinel) method to dict. > > > > It can accept a single argument, that must be an iterable, or multiple > > arguments. > > > > The first element must be a key of the dict. If there's not a second > > element, the value is returned. If it's present, it tries to use it as > > an argument for the eventual __getitem__() of the value object, and so > > on. > > > > In this process, if a KeyError, an IndexError or a TypeError is > > raised, if default is set its value is returned, otherwise the > > exception will be raised. > > > > Example: > > > > d = {1: [42]} > > d.get_deep(1, 0) > > # 42 > > d.get_deep(range(3), default=1981) > > # 1981 > > d.get_deep((1, 1)) > > # IndexError: list index out of range > > > A slight problem here: a tuple (1, 1) can be a key of the dict.
This problem can raise only if you want to get the first level, but for this purpose there's __getitem__ already. You can have: d = {(1, 1): [5, 7]} and probably you will write d.get_deep((1, 1), 1) or d.get_deep([(1, 1), 1]) > > 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? > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@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/XQAFJEZ5PABLKRF7FLDOEUDKNDGF7D34/ > Code of Conduct: http://python.org/psf/codeofconduct/ _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@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/EJLZHRMRKPD6WUDFABH6ODFBIUWCRKDF/ Code of Conduct: http://python.org/psf/codeofconduct/