I'm currently using the method below to define a multidimensional dictionary in python. My question is: Is this the preferred way of defining multidimensional dicts?
from collections import defaultdict def site_struct(): return defaultdict(board_struct) def board_struct(): return defaultdict(user_struct) def user_struct(): return dict(pageviews=0,username='',comments=0) userdict = defaultdict(site_struct)
to get the following structure:
userdict['site1']['board1']['username'] = 'tommy'
I'm also using this to increment counters on the fly for a user without having to check if a key exists or is set to 0 already. E.g.:
userdict['site1']['board1']['username']['pageviews'] += 1
Tuples are hashable. Probably I'm missing the point, but why don't you use a standard dictionary with the convention that the keys will be triples? For example:
userdict = {} userdict[('site1', 'board1', 'username')] = 'tommy'
You can create a multidimensional dictionary of any type like this:
from collections import defaultdict from collections import Counter def multi_dimensions(n, type): """ Creates an n-dimension dictionary where the n-th dimension is of type 'type' """ if n<=1: return type() return defaultdict(lambda:multi_dimensions(n-1, type)) >>> m = multi_dimensions(5, Counter) >>> m['d1']['d2']['d3']['d4'] Counter()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With