On Aug 18, 12:30 pm, Nick Craig-Wood <[EMAIL PROTECTED]> wrote: > I think that if you truly want to emulate a perl hash then you would > want this which does the above but recursively. > > from collections import defaultdict > > class hash(defaultdict): > def __init__(self): > defaultdict.__init__(self, hash) > > D=hash() > > D[1][2][3][4]=5 > D[1][4][5]=6 > > print D > > -- > Nick Craig-Wood <[EMAIL PROTECTED]> --http://www.craig-wood.com/nick Nick, I thought I'd save your hash implementation away in my bag of tricks:
# File: autovivifying_dict.py from collections import defaultdict class hash(defaultdict): """ Used like a dict except sub-dicts automagically created as needed Based on: http://groups.google.com/group/comp.lang.python/msg/f334fbdafe4afa37 >>> D=hash() >>> D[1][2][3][4]=5 >>> D[1][4][5]=6 >>> D hash({1: hash({2: hash({3: hash({4: 5})}), 4: hash({5: 6})})}) >>> hash({1: hash({2: hash({3: hash({4: 5})}), 4: hash({7: 8})})}) hash({1: hash({2: hash({3: hash({4: 5})}), 4: hash({7: 8})})}) >>> """ def __init__(self, *a, **b): defaultdict.__init__(self, hash, *a, **b) def __repr__(self): return "hash(%s)" % (repr(dict(self)),) def _test(): import doctest doctest.testmod() if __name__ == "__main__": _test() - Paddy. -- http://mail.python.org/mailman/listinfo/python-list