从多维数组到层次结构

2024-05-13 23:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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获得更高层次的结构,即:

^{pr2}$

是吗?在


Tags: 数据data格式结构marketingnetgearpr2toyota
3条回答

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

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

打印得很漂亮:

^{pr2}$

autovivification article on wikipedia

from collections import defaultdict
def tree():
    return defaultdict(tree)

d = tree()
for x,y,k,v in data:
    d[x][y][k] = v

下面的代码在长度方面比较灵活,但是没有检查最小长度记录(minimum is 2 elements(key,value))。在

def nest(data):
    result = {}
    for record in data:
        assert len(record) > 2
        d = result
        for key in record[:-2]:
            d = d.setdefault(key, {})

        key,value = record[-2:]
        d[key] = value
    return result

相关问题 更多 >