dictionary wart
Fuzzyman
michael at foord.net
Thu Mar 18 10:06:48 EST 2004
On Thu, 18 Mar 2004 13:46:19 GMT, Jesper <jolsen at mail2world.com>
wrote:
>Paul Rubin wrote:
>> jolsen at mail2world.com (Jesper Olsen) writes:
>>
>>>Does python have a way of defining a dictionary default?
>>>I think not, but are there any plans to incorporate it?
>>>
>>>Intuitively I would imagine that
>>>
>>>a={}
>>>a.set_default(my_default)
>>>
>>>would do this -ie. a[my_new_key] should now return the the default
>>>value my_default instead of creating an exception.
>>
>>
>> No, instead of a[my_new_key] use a.get(my_new_key, my_default).
>> That does what you want.
>
>Unfortunately not - get() is different, because you can not assign to it.
>For instance in a dictionary which is mapping strings to integers (or
>lists), I would like to do
>
>a[my_key]+=5
>
>expressing that with get() would be awkward.
>
>Jesper
You can however subclass dict to create something that *behaves* like
a dictionary, but for unknown keys returns a default :
Regards,
Fuzzy
http://www.voidspace.org.uk/atlantibots/pythonutils.html
e.g. (untested - but should work)
class defaultDict(dict):
"""A dictionary that returns a default for non-existent keys.
Won't work for methods like pop unless you also define them as
well."""
def __init__(self, default):
dict.__init__(self)
self.default = default
def __getitem__(self, item):
if self.has_key(item):
return dict.__getitem__(self, key)
else:
return self.default
if __name__ == '__main__':
a = defaultDict(3)
a['test'] = 4
print a['test']
print a['fish']
---
Everyone has talent. What is rare is the courage to follow talent to the dark place where it leads. -Erica Jong
Ambition is a poor excuse for not having sense enough to be lazy. -Milan Kundera
http://www.voidspace.org.uk
Where Headspace Meets Cyberspace
Cyberpunk and Science Resource Site
Exploring the worlds of Psychology, Spirituality, Science and Computing
--
http://www.fuchsiashockz.co.uk
http://groups.yahoo.com/group/void-shockz
http://www.learnlandrover.com
More information about the Python-list
mailing list