On Aug 28, 8:36 am, rodrigo <[EMAIL PROTECTED]> wrote: > Im using this construct a lot: > > if dict.has_key(whatever): > dict[whatever] += delta > else: > dict[whatever] = 1 > > sometimes even nested: > > if dict.has_key(whatever): > if dict[whatever].has_key(someother): > dict[whatever][someother] += delta > else: > dict[whatever][someother] = 1 > else: > dict[whatever]={} > dict[whatever][someother] = 1 > > there must be a more compact, readable and less redundant way to do > this, no? > > Thanks, > > Rodrigo
As Bruno said, don't shadow the built-in objects. When things inevitably go south because the dict class has been replaced by your dictionary, it will be difficult for you to find out what went wrong. Under Python 2.5, you have the defaultdict class in the collections module [1]. (This class is trivial to implement in prior versions of Python, too.) >>> from collections import defaultdict >>> myDict = defaultdict(lambda: 1) >>> myDict['spam'] = 5 >>> myDict['spam'] += 10 >>> myDict['vikings'] += 20 >>> myDict defaultdict(<function <lambda> at 0x00AAC970>, {'vikings': 21, 'spam': 15}) >>> --Jason [1] The module documentation is at "http://docs.python.org/lib/module- collections.html" -- http://mail.python.org/mailman/listinfo/python-list