提问人:skeetastax 提问时间:11/8/2023 更新时间:11/8/2023 访问量:51
如何在 Python 中创建数组的嵌套“字典”?[复制]
How do I create a nested `dict` of arrays in Python? [duplicate]
问:
我需要像这样“透视”数组的数组:
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']]
}
第一列将被转透并用作 ,在该列下将连接 - 作为一个或多个数组的数组 - 所有原始数组减去第一个元素(被“提升”为“父元素”)。想想 Excel 数据透视表。branch
这不起作用:
mytree = {}
for arr in mytable:
toadd = {arr[0]: [[arr[1], arr[2]]}
mytree.append(toadd)
我接受,如果上面的示例不被接受为有效的对象语法,我可能需要更改确切的输出结构以包含更多带引号的键名。
答:
3赞
Corralien
11/8/2023
#1
您可以使用 setdefault
方法dict
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
:collections
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']]})
评论
数组
,而是一个.list
itertools.groupby