我需要‘pivot’一个这样的数组数组:

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的列,在该列下将联接所有原始数组减go 第一个元素(即‘promoted’到‘102’)--作为101个数组的array.Think Excel Pivot Table.

This does not work:

mytree = {}

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

我承认,如果上面的示例不被接受为有效的对象语法,我可能需要更改确切的输出 struct 以包括更多带引号的键名.

推荐答案

你可以从dict开始使用setdefault方法

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

collections模块中的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']]})

Python相关问答推荐

Pandas dataframe中str.place()的奇怪行为.删除与目标字符串不匹配的值

Chrome 122-如何允许不安全的内容?(不安全下载被阻止)

使用极轴 Select 一系列柱

无法使用ConnectSlotsByName将插槽连接到pqtgraph InfiniteLine信号

如何在Python中更改按钮的值(Flask )

为列PANAS中的每个字符串值创建累计和列

try 使用双反斜杠将反斜杠替换为另一个符号,但失败

如何对词典列表使用Join方法,然后为值添加字符串

如何在NumPy中从一维时间序列建立3D矩阵?

我正在试着做一个简单的程序来判断学校的一个项目的调查数据,但它不起作用,有人能帮我吗?

为什么在涉及int和调用str()的多重继承的情况下,Python3.7和3.10的MRO似乎有所不同?

识别相同的重复值-Pandas

如何安装从Anaconda包站点下载的.conda文件?

Python和MatLab中的Gammainc差异

Python加载(一种)屏幕

如何从Pandas 中的行中提取列

连接和游标仍可在块外部使用

更改数据框中列的值

将XGBoost赋形值转换为`SHAP`';S解释对象

不建议使用正被属性替换的函数