如何在 Python 中创建数组的嵌套“dict”?

问题描述 投票:0回答:2

我需要“旋转”这样的数组:

mytable = [
    [117, 12, 'wer'],
    [117, 23, 'hgr'],
    [42, 33, 'hgj'],
    [910, 27, 'sfr'],
    [910, 31, 'mhn'],
    [910, 98, 'wlc'],
    [453, 11, 'nlj'],
    [453, 65, 'nfg'],
    [312, 17, 'fyg'],
    [312, 44, 'gfn']
]

进入嵌套字典,如下所示:

mytree = {
    117: [[12, 'wer'], [23, 'hgr']],
    42 : [[33, 'hgj']],
    910: [[27, 'sfr'], [31, 'mhn'], [98, 'wlc']],
    453: [[11, 'nlj'], [65, 'nfg']],
    312: [[17, 'fyg'], [44, 'gfn']]
}

第一列将被旋转并用作

branch
,在其下将连接 - 作为一个或多个数组的数组 - 所有原始数组减去第一个元素(即' 晋升'至'家长')。 想想 Excel 数据透视表

这不起作用:

mytree = {}

for arr in mytable:
    toadd = {arr[0]: [[arr[1], arr[2]]}
    mytree.append(toadd)

我接受,如果上面的示例不被接受为有效的对象语法,我可能需要更改确切的输出结构以包含更多带引号的键名称。

python dictionary multidimensional-array tree pivot-table
2个回答
1
投票

您可以使用:

mytree = {}

for (k, *arr) in mytable:
    mytree.setdefault(k, []).append(arr)

输出:

>>> mytree
{117: [[12, 'wer'], [23, 'hgr']],
 42: [[33, 'hgj']],
 910: [[27, 'sfr'], [31, 'mhn'], [98, 'wlc']],
 453: [[11, 'nlj'], [65, 'nfg']],
 312: [[17, 'fyg'], [44, 'gfn']]}

defaultdict

from collections import defaultdict

mytree = defaultdict(list)

for (k, *arr) in mytable:
    mytree[k].append(arr)

输出:

>>> mytree
defaultdict(list,
            {117: [[12, 'wer'], [23, 'hgr']],
             42: [[33, 'hgj']],
             910: [[27, 'sfr'], [31, 'mhn'], [98, 'wlc']],
             453: [[11, 'nlj'], [65, 'nfg']],
             312: [[17, 'fyg'], [44, 'gfn']]})

0
投票

这是例子 main_dict = {所有者:dict(zip(狗,总计))为所有者,zip中的总计(所有者,总计)}

© www.soinside.com 2019 - 2024. All rights reserved.