我有一个示例数组,如下所示。数组大小是可变的。 (示例为 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。
可能有比我的更漂亮的解决方案:
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)