I like this. Something that I would use for sure.

I have used a lot of:

```
(value: None | object ) or default
```

, but I stopped for obvious reasons. However, I miss those days, when I was 
ignorant that this is not a good idea.

> On 11 Jul 2023, at 01:17, David Mertz, Ph.D. <david.me...@gmail.com> wrote:
> 
> This is basically PEP 505 – None-aware operators 
> (https://peps.python.org/pep-0505/ <https://peps.python.org/pep-0505/>).
> 
> I've generally been opposed to that, but clearly some serious and smart 
> Pythonistas have supported it.  That PEP is a bigger lift than your 
> suggestion,  but correspondingly more general.
> 
> On Mon, Jul 10, 2023, 6:04 PM Jothir Adithyan <adithyanjot...@gmail.com 
> <mailto:adithyanjot...@gmail.com>> wrote:
> Hi everyone,  
> 
> I would like to briefly present my idea regarding the `get` function commonly 
> used with dictionaries. When working with large amounts of JSON data, I often 
> encounter code that doesn't feel very Pythonic to me.  
> 
> Problem Statement:  
> 
> The `get` function allows chaining of method calls, which is quite useful 
> when working with dictionaries. It also has a convenient `default` parameter 
> that returns a default value if the key is not found in the dictionary. This 
> feature makes it safe and easy to use. However, problems arise when the 
> dictionary contains the key we are accessing, but the corresponding value is 
> `None`. In such cases, subsequent `get` calls fail because the `get` method 
> belongs to objects of type `dict` and not `None`. To address this, I propose 
> adding a new parameter to the `get` function or introducing a new function 
> called `get_or` that swiftly handles this issue. This new parameter, called 
> `arbitrary`, would accept an arbitrary value to be returned by subsequent 
> `get` calls in case the retrieved value of the key is `None`.  
> 
> Assumptions:  
> 
> The problem statement is based on a few assumptions:  
> - You prefer chaining `get` statements for cleaner code.  
> - You expect at least some of the `get` methods to return `None`.  
> - You want to avoid the hassle of using `try` and `except` for every `get` 
> chain.  
> 
> If you fall into the category of people who wish for a simpler way to work 
> with dictionaries and handle large amounts of data, I hope you can empathise 
> with this proposal.  
> 
> I have made a simple implementation by modifying the `get` method, which is 
> below this thread. I would appreciate your valuable input on this feature. 
> Before diving into coding, I want to make sure this is not a bad idea waiting 
> to reveal itself in the dark.  
> 
> Thank you for taking the time to read this thread. Your feedback is greatly 
> appreciated.  
> 
> Best regards,  
> Jothir Adithyan  
> 
> 
> 
> 
> **Runnable Version**  
> https://replit.com/@Adithyan71/GetOr <https://replit.com/@Adithyan71/GetOr>
> 
> 
> 
> **Code Samples.**  
> 
> ```  
> class PlayDict(dict):  
>     def get_or(self, key, arbitrary=None, default=None):  
>         if not self.__contains__(  
>             key  
>         ):  # case 1 the key does not exist hence the default value  
>             return default  
>         elif (  
>             self[key] is None  
>         ):  # case 2 key does exist but the value is None return the arb 
> value  
>             return arbitrary  
>         return self[key]  # case 3 the key is present and the value is not 
> None  
> 
> 
> import contextlib  
> parent_dict = PlayDict()  
> parent_dict['k1'] = None  
> parent_dict['k2'] = {"child_key": "val"} # Parent dict can contain nested 
> dicts  
> 
> with contextlib.suppress(AttributeError):  
>     result = parent_dict.get("k1", {}).get("child_key") # This will raise 
> AttributeError  
> 
> result = parent_dict.get_or("k1", default={}, arbitrary={}).get("child_key") 
> # This will work  
> 
> print(result)  
> ```
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org 
> <mailto:python-ideas@python.org>
> To unsubscribe send an email to python-ideas-le...@python.org 
> <mailto:python-ideas-le...@python.org>
> https://mail.python.org/mailman3/lists/python-ideas.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/IELDCURRVQXCPGD4EPPLL7MYWJT4XHKV/
>  
> <https://mail.python.org/archives/list/python-ideas@python.org/message/IELDCURRVQXCPGD4EPPLL7MYWJT4XHKV/>
> Code of Conduct: http://python.org/psf/codeofconduct/ 
> <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/4BCGPZ6TJFN4DCXIPR5I24ND7MOYPV5T/
> 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/7BYLLVW6PQ7QZ6RC3NNXWEKEAAN2PPOK/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to