我需要“旋转”这样的数组:
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)
我接受,如果上面的示例不被接受为有效的对象语法,我可能需要更改确切的输出结构以包含更多带引号的键名称。
您可以使用:
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']]})
这是例子 main_dict = {所有者:dict(zip(狗,总计))为所有者,zip中的总计(所有者,总计)}