Translate a table to a hierarchical dictionary?
dictionary, nested, python
Solution
input = [('A1', 'B1', 'C1', 'Value'), (...)]
from collections import defaultdict
tree = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
#Alternatively you could use partial() rather than lambda:
#tree = defaultdict(partial(defaultdict, partial(defaultdict, list)))
for x, y, z, value in input:
tree[x][y][z].append(value)
Problem
I have a table of the form: ``` A1, B1, C1, (value) A1, B1, C1, (value) A1, B1, C2, (value) A1, B2, C1, (value) A1, B2, C1, (value) A1, B2, C2, (value) A1, B2, C2, (value) A2, B1, C1, (value) A2, B1, C1, (value) A2, B1, C2, (value) A2, B1, C2, (value) A2, B2, C1, (value) A2, B2, C1, (value) A2, B2, C2, (value) A2, B2, C2, (value) ``` I'd like to work with it in python as a dictionary, of form: ``` H = { 'A1':{ 'B1':{ 'C1':[],'C2':[],'C3':[] }, 'B2':{ 'C1':[],'C2':[],'C3':[] }, 'B3':{ 'C1':[],'C2':[],'C3':[] } }, 'A2':{ 'B1':{ 'C1':[],'C2':[],'C3':[] }, 'B2':{ 'C1':[],'C2':[],'C3':[] }, 'B3':{ 'C1':[],'C2':[],'C3':[] } } } ``` So that `H[A][B][C]` yields a particular unique list of values. For small dictionaries, I might just define the structure in advance as above, but I am looking for an efficient way to iterate over the table and build a dictionary, without specifying the dictionary keys ahead of time.