dict.get(key, default) evaluates default even if key exists

Chris Angelico rosuav at gmail.com
Thu Dec 17 07:33:55 EST 2020


On Thu, Dec 17, 2020 at 11:16 PM jak <nospam at please.ty> wrote:
>
> Il 17/12/2020 12:40, Peter J. Holzer ha scritto:
> > On 2020-12-17 12:16:29 +0100, jak wrote:
> >> print(_ if d.get('a', None) is not None else get_default())
> >
> > That doesn't work:
> >
> >>>> print(_ if d.get('a', None) is not None else get_default())
> > Traceback (most recent call last):
> >    File "<stdin>", line 1, in <module>
> > NameError: name '_' is not defined
> >
> > But this works:
> >
> >>>> print(_ if (_ := d.get('a', None)) is not None else get_default())
> > 1
> >
> > (I would prefer ChrisA's solution, though.)
> >
> >          hp
> >
> this one?
>
> """"
>
> D['a'] if 'a' in D else get_default()
>
> ChrisA
>
> """"
>
> This solution search two times same key.

Yes, it does, but hash lookups are pretty fast. Unless your key is
some sort of custom object with a very expensive __hash__ function,
the double lookup isn't going to be too costly. But if that does
bother you, you can write it as a try/except instead.

ChrisA


More information about the Python-list mailing list