将列表或元组作为值附加到字典或其他解决方案以建立父子关系

2024-05-21 06:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Wordpress数据库中检索了以下菜单项元组及其层次结构。 第一个值是菜单项的名称,第二个值是项id,第三个值是父项id 如果父元素id为0,则它是顶级元素

('Contact', 72, 0)
('Impressumm', 74, 0)
('Login', 227, 0)
('Company', 65, 0)
('References', 83, 65)
('AboutUs', 85, 65)
('Press', 87, 65)
('Solutions', 76, 0)
('ProductA', 242, 76)
('TechnologyA', 316, 242)
('Programming', 318, 242)
('Soldering', 321, 242)
('Welding', 323, 242)
('ProductB', 245, 76)
('Features', 326, 245)
('CADimport', 328, 245)
('Measuring', 331, 245)
('Surfaces', 333, 245)
('Editor', 248, 76)
('Simulation', 251, 76)
('Postprocessing', 254, 76)
('Manufacturing', 79, 0)
('Parts', 257, 79)
('Date', 259, 79)
('Tools', 261, 79)
('Communication', 263, 79)
('WebApps', 296, 79)
('Services', 69, 0)
('Training', 287, 69)
('Support', 285, 69)
('Forum', 289, 69)
('Events', 187, 0)
('Education', 269, 187)
('Workshops', 272, 187)
('Fairs', 275, 187)
('Seminars', 281, 187)
('Meetings', 278, 187)

对于元组数组中的每个元组,我想添加完整的层次结构。 例如

name,item_id,hierarchy
('Contact',72,'/Contact')
('Solutions',76,'/Solutions')
('Programming',318,'/Solutions/ProductA/Programming')

这里的唯一键是项id(第二个元素)。名称可能重复出现或多次出现

我有一个想法,这可以用iPython的字典来完成。由于项id可能出现在元组列表中(例如作为父项id),在定义它们之前,必须至少遍历数组一次

谁能告诉我一些开始的想法,怎么做

  1. 遍历数组一次并构建字典

  2. 其次,按项目id(递归地?)遍历字典以 查找父\u id并将名称附加到第二个值, 我们称之为等级制度


Tags: 名称id数据库元素字典层次结构wordpresscontact
1条回答
网友
1楼 · 发布于 2024-05-21 06:22:57

创建递归查找项父级的函数:

def getHierarchy(item_id,array_of_tuple,separator="/"):

  for i, (tuple_name, tuple_id, tuple_parent_id) in enumerate(array_of_tuple):
      if item_id == tuple_id:
          if tuple_parent_id == 0:
              return separator+tuple_name
          else:
              return separator+tuple_name+getHierarchy(tuple_parent_id,array_of_tuple)
  return ""

它产生:

>>print getHierarchy(289,array_of_tuples)

>>/Forum/Services

相关问题 更多 >