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

时间:2014-11-12 14:59:23

标签: python list dictionary tuples ipython

从Wordpress数据库中检索了以下菜单项及其层次结构元组。 第一个值是菜单项的名称,第二个是 item_id ,第三个是 parent_id。 如果 parent_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')

此处的唯一键是 item_id (第二个元素)。名称可能显示为重复或多次。

我认为这可以在iPython中使用字典来完成。由于item_id可能出现在元组列表中(例如,作为parent_id),因此在定义它们之前,必须至少在数组中进行一次。

有人能给我一些启动的想法吗,

  1. 迭代一次数组并构建字典

  2. 其次,通过item_id(递归?)来查看字典 查找parent_id并将名称附加到第二个值, 我们称之为层次结构。

1 个答案:

答案 0 :(得分:1)

创建一个递归查找项目父项的函数:

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