[Python-Dev] dict() enhancement idea?

Just van Rossum just@letterror.com
Thu, 21 Nov 2002 16:16:29 +0100


Oren Tirosh wrote:

> I assume that the motive is to get rid of the quotes around the key and
> conceptually treat it as a "symbol" rather than as a string.  If that is 
> the case it could apply to access as well as initialization.
> 
> class record(dict):
>     def __init__(self, __initfrom=(), **kw):
>         self.__dict__ = self
>         dict.__init__(self, __initfrom)
>         self.update(kw)
> 
>     def __repr__(self):
>         return "%s(%s)" % (self.__class__.__name__,
>           ', '.join(['%s=%s' % (k, repr(v)) for k,v in self.items()]))
> 
> Fields can be accessed as either items or attributes of a record object.

(Neat! Would've never guessed that works... I actually wrote a class with this
purpose the other day, I'll see whether I can use the above instead.)

But: no, I simply find the {"key": "value"} syntax sometimes inappropriate.
Consider the following example:

   template = """some elaborate template using %(name)s-style
   substitution"""
   
   # idiom 1
   x = template % {"name1": foo(), "name2": baz()}

   # idiom 2
   name1 = foo()
   name2 = foo()
   x = template % locals()
   
   # idiom 3 (after my patch, or with a homegrown function)
   x = template % dict(key1=foo(), key2=baz())
   
I find #3 more readable than #1. #2 ain't so bad, but I hate it that when you're
quickly going over the code it looks like there are some unused variables.

Just