Hi list
I have a proposal for a minor (improvement?) to dict declarations.
I find a common requirement I have is to include one or more entries in a dict
only if some condition is met. Currently, the usual way of doing that is to add
one or more if statements.
Simple (but hopefully relatable-to-real-world-code) example. Here we're
constructing a query for a database based on the arguments passed in. In some
cases we don't want to include some fields in the search at all depending on
what the values passed in are.
###
def construct_query(user_id,
max_results=10000,
active=None,
deleted=None):
query = {
'user_id': user_id
}
if max_results > 0:
query['max_results'] = max_results
if active is not None:
query['active'] = active
if deleted is not None:
query['deleted'] = deleted
return query
###
This is OK-ish, but seems unnecessarily verbose, and it gets worse if you have
more conditional entries. In addition, you're separating the dict setup code
into two or more places so it is slower to grasp mentally.
This is a fairly common (tedious) pattern in my code, but I feel it could be
avoided. In my view it would be better if it was possible to conditionally add
the entry in the dict declaration.
My proposal is that there should be a special value defined that results in a
dict entry not being added to the dict if either the key or the value equals
this value. There may be several ways to achieve this, but here's one way it
could work.
###
def construct_query(user_id,
max_results=10000,
active=None,
deleted=False):
return {
'user_id': user_id,
'max_results': max_results or dict.skip,
'active': active if active is not None else dict.skip,
'deleted': deleted if deleted is not None else dict.skip
}
###
..."skip" being a unique object defined in and accessible from dict (there may
be better places to make it available). The dict insertion code then simply
ignores those entries when creating the dict.
I think this would be relatively easy to achieve. No significant modification
to the language, just a minor modification to the dict code (as far as I know).
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/OYYCR7E5SPRRVBRYQYPZXSUAVLB7BZSA/
Code of Conduct: http://python.org/psf/codeofconduct/