从多维数组到层次结构

arc*_*ies 1 python list hierarchy

如果我得到以下格式的一些数据:

data = [
    ['Airbus', 'R&D', '01', 5],
    ['Airbus', 'R&D', '02', 8],
    ['Airbus', 'Marketing', '01', 9],
    ['Airbus', 'Marketing', '02', 54],
    ['Netgear', 'R&D', '01', 12],
    ['Netgear', 'R&D', '02', 5],
    ['Netgear', 'Marketing', '01', 6],
    ['Netgear', 'Marketing', '02', 11],
    ['Toyota', 'R&D', '01', 9],
    ['Toyota', 'R&D', '02', 52],
    ['Toyota', 'Marketing', '01', 43],
    ['Toyota', 'Marketing', '02', 34],
]
Run Code Online (Sandbox Code Playgroud)

我如何使用python来获得更多层次结构,即:

data = {

'Airbus': {
    'R&D': {
        '01': 5, '02': 8
    },
    'Marketing': {
        '01': 9,'02': 54
    }
},
'Netgear'
    etc...
}
Run Code Online (Sandbox Code Playgroud)

JBe*_*rdo 6

嵌套defaultdict(或者可能dict.setdefault- >不太可读)非常简单:

d = collections.defaultdict(lambda:collections.defaultdict(dict))
for x,y,k,v in data:
    d[x][y][k]=v
Run Code Online (Sandbox Code Playgroud)

并且相当印刷它:

>>> pprint.pprint(d)
{'Airbus': {'Marketing': {'01': 9, '02': 54},
            'R&D': {'01': 5, '02': 8}},
 'Netgear': {'Marketing': {'01': 6, '02': 11},
             'R&D': {'01': 12, '02': 5}},
 'Toyota': {'Marketing': {'01': 43, '02': 34},
            'R&D': {'01': 9, '02': 52}}}
Run Code Online (Sandbox Code Playgroud)