Re: Dictionaries with variable default.
Op 03-11-14 om 12:09 schreef Chris Angelico: On Mon, Nov 3, 2014 at 10:04 PM, Antoon Pardon antoon.par...@rece.vub.ac.be wrote: Is it possible to have a default dictionary where the default is dependant on the key? I was hoping something like this might work: m = defaultdict(lambda key: key+1) But it obviously doesn't: m[3] Traceback (most recent call last): File stdin, line 1, in module TypeError: lambda() takes exactly 1 argument (0 given) Yes, but not with the defaultdict. Instead, just implement __missing__: class KeyPlusOne(dict): def __missing__(self, key): return key+1 ChrisA So How should I call this: class ...dict(dict): def __init__(self, fun): self.fun = fun def __missing__(self, key): return self.fun(key) -- https://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries with variable default.
So How should I call this: class ...dict(dict): def __init__(self, fun): self.fun = fun def __missing__(self, key): return self.fun(key) I don't know how you should, but I tried the following which seems to work class KeyPlusOne( dict ) : def __missing__( self , key ) : return ( 2 * key ) + 1 kp1 = KeyPlusOne() d = { } for n in range( 11 ) : d[ n ] = kp1[ n ] print '\n key : value \n' for key , value in d.iteritems() : print '%2d : %2d' % ( key , value ) -- Stanley C. Kitching Human Being Phoenix, Arizona -- https://mail.python.org/mailman/listinfo/python-list
Dictionaries with variable default.
Is it possible to have a default dictionary where the default is dependant on the key? I was hoping something like this might work: m = defaultdict(lambda key: key+1) But it obviously doesn't: m[3] Traceback (most recent call last): File stdin, line 1, in module TypeError: lambda() takes exactly 1 argument (0 given) -- Antoon Pardon -- https://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries with variable default.
On Mon, Nov 3, 2014 at 10:04 PM, Antoon Pardon antoon.par...@rece.vub.ac.be wrote: Is it possible to have a default dictionary where the default is dependant on the key? I was hoping something like this might work: m = defaultdict(lambda key: key+1) But it obviously doesn't: m[3] Traceback (most recent call last): File stdin, line 1, in module TypeError: lambda() takes exactly 1 argument (0 given) Yes, but not with the defaultdict. Instead, just implement __missing__: class KeyPlusOne(dict): def __missing__(self, key): return key+1 ChrisA -- https://mail.python.org/mailman/listinfo/python-list