如何将变量数组转换为嵌套的Python列表?

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

我有一个示例数组,如下所示。数组大小是可变的。 (示例为 4x4)

my_array = [[A11, A12, A13, A14],
            [A21, A22, A23, A24],
            [A31, A32, A33, A34],
            [A41, A42, A43, A44]]

我要做的是将其转换为以下形式的列表

[{A11:[{A12:[{A13:[A14]}]}]}]
其中列中的相同元素将位于同一列表中。数组中的最后一项必须是列表。 “无”值将被忽略。

示例:

sample_array = [[AA, BB, CC, DD],
                [AA, BB, PP, None],
                [AA, BB, QQ, RR],
                [AA, BB, QQ, SS],
                [AA, JJ, UU, None],
                [EE, FF, TT, None]]
                
output = [{AA:[
              {BB:[
                   {CC:[DD]},
                   [PP],
                   {QQ:[RR,SS]}
                   ]},
               {JJ:[UU]}
              ]},
          {EE:[
              {FF:[TT]}
              ]}]

我正在尝试循环和集合,但由于数组大小是可变的,我遇到了麻烦 TT。

python arrays list dictionary nested
1个回答
0
投票

可能有比我的更漂亮的解决方案:

def nest_array(input):
    result = []
    for row in input:
        current_list = result
        last_item = None
        for item in row:
            if item is not None:
                if len(current_list) == 0 \
                        or type(current_list[0]) != dict \
                        or item not in current_list[0]:
                    if len(current_list) == 0:
                        current_list.append(item)
                    else:
                        if type(current_list[0]) == dict:
                            current_list.append([item])
                            current_list = current_list[-1]
                        else:
                            current_list.clear()
                            current_list.append({last_item: [item]})
                            current_list = current_list[0][last_item]
                else:
                    current_list = current_list[0][item]
            last_item = item
    return result

sample_array = [['AA', 'BB', 'CC', 'DD'],
                ['AA', 'BB', 'PP', None],
                ['AA', 'BB', 'QQ', 'RR'],
                ['AA', 'BB', 'QQ', 'SS'],
                ['AA', 'JJ', 'UU', None],
                ['EE', 'FF', 'TT', None]]

result = nest_array(sample_array)
© www.soinside.com 2019 - 2024. All rights reserved.