Skip to main content
 首页 » 编程设计

python之从多维数组到层次结构

2025年05月04日10bonelee

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

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], 
] 

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

data = { 
 
'Airbus': { 
    'R&D': { 
        '01': 5, '02': 8 
    }, 
    'Marketing': { 
        '01': 9,'02': 54 
    } 
}, 
'Netgear' 
    etc... 
} 

?

请您参考如下方法:

使用嵌套的 defaultdict 非常简单(或者可能是 dict.setdefault -> 可读性较差):

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

并漂亮地打印它:

>>> 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}}}