Executive summary: Dicts are unordered, so we can distinguish dict from set by the first item (no new notation), and after that default identifiers to (name : in-scope value) items. Also some notational bikeshedding. Atsuo Ishimoto writes:
It is sometimes tedious to write a dictionary in Python. For example,
def register_user(first, last, addr1, addr2): d = {'first': first, 'last': last, 'addr1': addr1, 'addr2': addr2, 'tel': '123-456-789'}
requests.post(URL, d)
In this particular case, def register_user(first, last, addr1, addr2): d = locals().copy() # .copy is unnecessary in this case, # but note that the next line may # pollute the locals d['tel'] = '123-456-789' requests.post(URL, d) DTRTs. How often would locals() be usable in this way? Note: in the case of requests, this might be a vulnerability, because the explicit dict display would presumably include only relevant items, while locals() might inherit private credentials from the arguments, which need to be explicitly del'ed from d.
The dict literal contains a lot of duplicated words and quotation marks. Using dict type looks nicer, but still verbose.
d = dict(first=first, last=last, addr1=addr1, addr2=addr2, tel='123-456-789')
With recent JavaScript, the same object can be written more easily.
d = {first, last, addr1, addr2, tel='123-456-789'}
How about adding similar syntax to Python? Like raw strings, we can add prefix letters such as '$' to the opening curly brace for the purpose.
I understand that this was done for ease of your POC implementatation, and you prefer a letter. But I'd like to emphasize: Please don't use $ for this. Among other things, it is both in appearance and historically based on "S" for "set"! Also, please use dict display syntax (':' not '='). If you're going to use prefix characters, I suggest 'd' for "dict", and maybe 's' for "set" as well (to allow the use case 's{}' for the empty set, though that's not terribly useful vs. set(). I'm mostly proposing it so I be the first to say "-1" on 's{}'. :-) This proposal does make me a more sympathetic to such abbreviations. I'm still at best +0 on it, though. It occurs to me there's an alternative syntax with even less notation: d = {'tel' : '123-456-789', first, last, addr1, addr2} I.e, if the first member of the display is a dict item, it's a dict, and the rest of the members default to key = name of identifier and value = value of identifier. If 'tel' weren't a key in d you'd write d = {'first' : first, last, addr1, addr2} A little awkward, but in many cases you'll be adding information as you did.
I wrote a simple POC implementation here. It looks working.
Thank you!