toolz.get_in is designed for exactly this.

https://toolz.readthedocs.io/en/latest/api.html#toolz.dicttoolz.get_in

The whole library is great!

Alex

On Wed, 1 Jul 2020 at 8:03 am, MRAB <pyt...@mrabarnett.plus.com> wrote:

> On 2020-06-30 23:26, Daniel. wrote:
> > I just want to make clear that safe navegator is enough to deal with
> this.
> >
> > Now that this is clear, the use case is almost always the same. I
> > received some json as response and want to extract a nested value.
> >
> > The way I'm doing this today is overloading an infix operator (I'm using
> >  >>) to emulate safe navegator so I do
> >
> > value = data >> get('foo') >> get(0) >> get('bar')
> > if value:
> >    do something
> >
> > This get can be found here
> >
> https://github.com/dhilst/geckones_twitter_bots/blob/e6aefe036d30f84835026054676bd018f3339801/utils.py#L91
> >
> > I started with array implementation them extended to object too. I
> > usually has something like this on all my projects that need to extract
> > data from requests, or a function that receives a dotted path, anyway..
> >
> > dict.get composes so nicely so why we don't have list.get too?
> >
> > Well, the safe navigator can solve this as it will compose as well as
> > any adhoc solution with the advantage of short circuit and also it's
> > brevity so ... For my use case, at last, safe navigator (or null
> > coalescing) will fit better than any list.get can do.
> >
> [snip]
>
> I'd probably just write a function for it:
>
> def get(data, default, *indexes):
>      try:
>          for index in indexes:
>              data = data[index]
>      except (IndexError, KeyError):
>          return default
>
> value = get(data, None, 'foo', 0, 'bar')
> if value is not None:
>      do something
> _______________________________________________
> 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/A6YJUYPK4LDCXAP4EDR5MXCCRL6QOBL5/
> 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/PKVX4K2H7JMYOTU6EGWVWCZINMR5VPVZ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to