使用列表值确定哪个是父节点,哪个是子节点

  • 本文关键字:子节点 父节点 列表 python
  • 更新时间 :
  • 英文 :


如何转换

[
[1, '025', ...],
[1, '026', ...],
[2, '027', ...],
[2, '028', ...],
[3, '029', ...],
[3, '030', ...],
[2, '031', ...],
[2, '032', ...],
]

[
[1, None, '025', ...],
[1, None, '026', ...],
[2, '026', '027', ...],
[2, '026','028', ...],
[3, '028','029', ...],
[3, '028','030', ...],
[2, '026','031', ...],
[2, '026','032', ...],
]

新添加的元素(所有元素中的第二个元素)是基于第一个元素的父元素号。如果您需要更多的细节或信息,请告诉我(这是我第一次问问题)

这段代码是一个可能的两步解决方案。请注意,我使输入列表只有两个元素,您应该尝试修改它以适应多元素的情况,以便更好地理解程序,

raw_list = [[1, '025'], [1, '026'],
[2, '027'], [2, '028'],
[3, '029'], [3, '030'],
[2, '031'], [2, '032']]
with_parents = []
# Find all parents (second sublist with the
#   the same first element)
# first element converted to string : [second element, counter]
parent_dict = {}
for elem in raw_list:
el_id = str(elem[0])
if el_id in parent_dict:
# Check the counter, replace if second
if parent_dict[el_id][1] == 1:
parent_dict[el_id][1] += 1
parent_dict[el_id][0] = elem[1]
else:
continue
else:
# If there is only one occurence, this persists 
parent_dict[el_id] = [elem[1], 1]
# Create the parent - child list
for elem in raw_list:
# ID of the parent
p_id = str(elem[0]-1)
# No parents
if p_id == '0':
with_parents.append([elem[0], None, elem[1]])
else:
# Look up and insert parent and child info
with_parents.append([elem[0], parent_dict[p_id][0], elem[1]])

在第一步中,代码将父节点的信息收集到一个字典中。有各种各样的方法可以做到这一点,也更有效。这里我们遍历整个列表,并简单地收集每个列表的第二个元素ID(子列表中的第一个条目)。ID变成字典键,而字典条目存储以后要使用的父值和计数器。计数器指示已经存储的值是否为raw_list中的第二个条目。有了字典,查找起来很方便数据之后,它使它有效不连续id(比如如果你有1、2、3、5、6——即少了一个4)。

在第二步中,代码构建最终的父子列表。它再次遍历列表,这一次在步骤1中构建的字典中查找正确的父节点。它将父级和子级信息保存到另一个列表中,即最后一个列表with_parents。它将带有ID = 1的条目作为特殊情况处理。

请注意,如果raw_list中只有一个父条目,那么该条目将是with_parents列表中使用的条目。

相关内容

  • 没有找到相关文章

最新更新