在Python中重新映射数组

在Python中重新映射数组,python,arrays,Python,Arrays,如何在Python中重新映射数组 我的数组如下所示: array = [ {"companyName": "HARRODS LIMITED", "companyNo": "00030209", "parentCompanyNo": "PRIMARY", "parentCompanyName": "PRIMARY"}, {"companyNo": "01889348", "companyNam

如何在Python中重新映射数组

我的数组如下所示:

array = [
        {"companyName": "HARRODS LIMITED", 
        "companyNo": "00030209", 
        "parentCompanyNo": "PRIMARY", 
        "parentCompanyName": "PRIMARY"}, 
        {"companyNo": "01889348", 
        "companyName": "Harrods (Uk) Limited", 
        "parentCompanyNo": "00030209", 
        "parentCompanyName": "HARRODS LIMITED"}, 
        {"companyNo": "01848143", 
        "companyName": "Harrods Holdings Limited", 
        "parentCompanyNo": "01889348", 
        "parentCompanyName": "Harrods (Uk) Limited"}, 
        {"companyNo": "05961740", 
        "companyName": "Qh Partners Limited",
        "parentCompanyNo":"01848143", 
        "parentCompanyName": "Harrods Holdings Limited"}, 
        {"companyNo": "06511479", 
        "companyName": "Qh Participations Limited", 
        "parentCompanyNo": "01848143", 
        "parentCompanyName": "Harrods Holdings Limited"}, 
        {"companyNo": "06511479", 
        "companyName": "Qh Participations Limited", 
        "parentCompanyNo": "05961740", 
        "parentCompanyName": "Qh Partners Limited"}, 
        {"companyNo": "05990648", 
        "companyName": "Harrods Group (Holding) Limited",
        "parentCompanyNo":"06511479",
        "parentCompanyName": "Qh Participations Limited"}, 
        {"companyNo": "Not Applicable", 
        "companyName": "Qatar Investment Authority", 
        "parentCompanyNo": "05990648", 
        "parentCompanyName": "Harrods Group (Holding) Limited"}, 
        {"companyNo": "06511479", 
        "companyName": "Qh Participations Limited", 
        "parentCompanyNo": "05961740", 
        "parentCompanyName": "Qh Partners Limited"}
    ]
{'HARRODS LIMITED': {'companyName': 'HARRODS LIMITED',
  'companyNo': '00030209',
  'parentCompanyNo': 'PRIMARY',
  'parentCompanyName': 'PRIMARY'},
 'Harrods (Uk) Limited': {'companyNo': '01889348',
  'companyName': 'Harrods (Uk) Limited',
  'parentCompanyNo': '00030209',
  'parentCompanyName': 'HARRODS LIMITED'},
 'Harrods Holdings Limited': {'companyNo': '01848143',
  'companyName': 'Harrods Holdings Limited',
  'parentCompanyNo': '01889348',
  'parentCompanyName': 'Harrods (Uk) Limited'},
 'Qh Partners Limited': {'companyNo': '05961740',
  'companyName': 'Qh Partners Limited',
  'parentCompanyNo': '01848143',
  'parentCompanyName': 'Harrods Holdings Limited'},
 'Qh Participations Limited': {'companyNo': '06511479',
  'companyName': 'Qh Participations Limited',
  'parentCompanyNo': '05961740',
  'parentCompanyName': 'Qh Partners Limited'},
 'Harrods Group (Holding) Limited': {'companyNo': '05990648',
  'companyName': 'Harrods Group (Holding) Limited',
  'parentCompanyNo': '06511479',
  'parentCompanyName': 'Qh Participations Limited'},
 'Qatar Investment Authority': {'companyNo': 'Not Applicable',
  'companyName': 'Qatar Investment Authority',
  'parentCompanyNo': '05990648',
  'parentCompanyName': 'Harrods Group (Holding) Limited'}}
我想更改数组,使数组中的对象在companyName键和parentCompanyNo键匹配时成为子对象

所以它看起来像这样:

[
    {"companyName": "HARRODS LIMITED", 
    "companyNo": "**00030209**", 
    "parentCompanyNo": "PRIMARY", 
    "parentCompanyName": "PRIMARY", 
    "children": [
        {"companyNo": "**01889348**", 
        "companyName": "Harrods (Uk) Limited", 
        "parentCompanyNo": "**00030209**", 
        "parentCompanyName": "HARRODS LIMITED", 
        "children": [
            {"companyNo": "**01848143**", 
            "companyName": "Harrods Holdings Limited", 
            "parentCompanyNo": "**01889348**", 
            "parentCompanyName": "Harrods (Uk) Limited", 
            "children": [
                {"companyNo": "05961740", 
                "companyName": "Qh Partners Limited",
                "parentCompanyNo":"**01848143**", 
                "parentCompanyName": "Harrods Holdings Limited"}
            ]}
        ]}
    ]}
]
这是我能得到的最远的结果:

def looper(loop1, loopParent):
    for item in obj1:
        children('01889348', item)
        if str(item['parentCompanyNo']) == loopParent:

             item['children'] = [{'loopChildren': item}]

谢谢

首先,让我们通过建立一个dict,让您轻松地按名称查找公司:

companies = {record['companyName']:record for record in array}
公司看起来是这样的:

array = [
        {"companyName": "HARRODS LIMITED", 
        "companyNo": "00030209", 
        "parentCompanyNo": "PRIMARY", 
        "parentCompanyName": "PRIMARY"}, 
        {"companyNo": "01889348", 
        "companyName": "Harrods (Uk) Limited", 
        "parentCompanyNo": "00030209", 
        "parentCompanyName": "HARRODS LIMITED"}, 
        {"companyNo": "01848143", 
        "companyName": "Harrods Holdings Limited", 
        "parentCompanyNo": "01889348", 
        "parentCompanyName": "Harrods (Uk) Limited"}, 
        {"companyNo": "05961740", 
        "companyName": "Qh Partners Limited",
        "parentCompanyNo":"01848143", 
        "parentCompanyName": "Harrods Holdings Limited"}, 
        {"companyNo": "06511479", 
        "companyName": "Qh Participations Limited", 
        "parentCompanyNo": "01848143", 
        "parentCompanyName": "Harrods Holdings Limited"}, 
        {"companyNo": "06511479", 
        "companyName": "Qh Participations Limited", 
        "parentCompanyNo": "05961740", 
        "parentCompanyName": "Qh Partners Limited"}, 
        {"companyNo": "05990648", 
        "companyName": "Harrods Group (Holding) Limited",
        "parentCompanyNo":"06511479",
        "parentCompanyName": "Qh Participations Limited"}, 
        {"companyNo": "Not Applicable", 
        "companyName": "Qatar Investment Authority", 
        "parentCompanyNo": "05990648", 
        "parentCompanyName": "Harrods Group (Holding) Limited"}, 
        {"companyNo": "06511479", 
        "companyName": "Qh Participations Limited", 
        "parentCompanyNo": "05961740", 
        "parentCompanyName": "Qh Partners Limited"}
    ]
{'HARRODS LIMITED': {'companyName': 'HARRODS LIMITED',
  'companyNo': '00030209',
  'parentCompanyNo': 'PRIMARY',
  'parentCompanyName': 'PRIMARY'},
 'Harrods (Uk) Limited': {'companyNo': '01889348',
  'companyName': 'Harrods (Uk) Limited',
  'parentCompanyNo': '00030209',
  'parentCompanyName': 'HARRODS LIMITED'},
 'Harrods Holdings Limited': {'companyNo': '01848143',
  'companyName': 'Harrods Holdings Limited',
  'parentCompanyNo': '01889348',
  'parentCompanyName': 'Harrods (Uk) Limited'},
 'Qh Partners Limited': {'companyNo': '05961740',
  'companyName': 'Qh Partners Limited',
  'parentCompanyNo': '01848143',
  'parentCompanyName': 'Harrods Holdings Limited'},
 'Qh Participations Limited': {'companyNo': '06511479',
  'companyName': 'Qh Participations Limited',
  'parentCompanyNo': '05961740',
  'parentCompanyName': 'Qh Partners Limited'},
 'Harrods Group (Holding) Limited': {'companyNo': '05990648',
  'companyName': 'Harrods Group (Holding) Limited',
  'parentCompanyNo': '06511479',
  'parentCompanyName': 'Qh Participations Limited'},
 'Qatar Investment Authority': {'companyNo': 'Not Applicable',
  'companyName': 'Qatar Investment Authority',
  'parentCompanyNo': '05990648',
  'parentCompanyName': 'Harrods Group (Holding) Limited'}}
第二,检查dict项目。如果公司记录中列出的母公司在dict中,则将公司记录添加到母公司记录的“子公司”字段中。此外,请跟踪哪些公司是“is_child”集合中的子公司

is_child = set()
​
for company, record in companies.items():
    parent = record['parentCompanyName']
    if parent in companies:
        children = companies[parent].setdefault('children', list())
        children.append(record)
        is_child.add(company)
公司现在看起来像:

({'HARRODS LIMITED': {'companyName': 'HARRODS LIMITED',
   'companyNo': '00030209',
   'parentCompanyNo': 'PRIMARY',
   'parentCompanyName': 'PRIMARY',
   'children': [{'companyNo': '01889348',
     'companyName': 'Harrods (Uk) Limited',
     'parentCompanyNo': '00030209',
     'parentCompanyName': 'HARRODS LIMITED',
     'children': [{'companyNo': '01848143',
       'companyName': 'Harrods Holdings Limited',
       'parentCompanyNo': '01889348',
       'parentCompanyName': 'Harrods (Uk) Limited',
       'children': [{'companyNo': '05961740',
         'companyName': 'Qh Partners Limited',
         'parentCompanyNo': '01848143',
         'parentCompanyName': 'Harrods Holdings Limited',
         'children': [{'companyNo': '06511479',
           'companyName': 'Qh Participations Limited',
           'parentCompanyNo': '05961740',
           'parentCompanyName': 'Qh Partners Limited',
           'children': [{'companyNo': '05990648',
             'companyName': 'Harrods Group (Holding) Limited',
             'parentCompanyNo': '06511479',
             'parentCompanyName': 'Qh Participations Limited',
             'children': [{'companyNo': 'Not Applicable',
               'companyName': 'Qatar Investment Authority',
               'parentCompanyNo': '05990648',
               'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]}]}]},
  'Harrods (Uk) Limited': {'companyNo': '01889348',
   'companyName': 'Harrods (Uk) Limited',
   'parentCompanyNo': '00030209',
   'parentCompanyName': 'HARRODS LIMITED',
   'children': [{'companyNo': '01848143',
     'companyName': 'Harrods Holdings Limited',
     'parentCompanyNo': '01889348',
     'parentCompanyName': 'Harrods (Uk) Limited',
     'children': [{'companyNo': '05961740',
       'companyName': 'Qh Partners Limited',
       'parentCompanyNo': '01848143',
       'parentCompanyName': 'Harrods Holdings Limited',
       'children': [{'companyNo': '06511479',
         'companyName': 'Qh Participations Limited',
         'parentCompanyNo': '05961740',
         'parentCompanyName': 'Qh Partners Limited',
         'children': [{'companyNo': '05990648',
           'companyName': 'Harrods Group (Holding) Limited',
           'parentCompanyNo': '06511479',
           'parentCompanyName': 'Qh Participations Limited',
           'children': [{'companyNo': 'Not Applicable',
             'companyName': 'Qatar Investment Authority',
             'parentCompanyNo': '05990648',
             'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]}]},
  'Harrods Holdings Limited': {'companyNo': '01848143',
   'companyName': 'Harrods Holdings Limited',
   'parentCompanyNo': '01889348',
   'parentCompanyName': 'Harrods (Uk) Limited',
   'children': [{'companyNo': '05961740',
     'companyName': 'Qh Partners Limited',
     'parentCompanyNo': '01848143',
     'parentCompanyName': 'Harrods Holdings Limited',
     'children': [{'companyNo': '06511479',
       'companyName': 'Qh Participations Limited',
       'parentCompanyNo': '05961740',
       'parentCompanyName': 'Qh Partners Limited',
       'children': [{'companyNo': '05990648',
         'companyName': 'Harrods Group (Holding) Limited',
         'parentCompanyNo': '06511479',
         'parentCompanyName': 'Qh Participations Limited',
         'children': [{'companyNo': 'Not Applicable',
           'companyName': 'Qatar Investment Authority',
           'parentCompanyNo': '05990648',
           'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]},
  'Qh Partners Limited': {'companyNo': '05961740',
   'companyName': 'Qh Partners Limited',
   'parentCompanyNo': '01848143',
   'parentCompanyName': 'Harrods Holdings Limited',
   'children': [{'companyNo': '06511479',
     'companyName': 'Qh Participations Limited',
     'parentCompanyNo': '05961740',
     'parentCompanyName': 'Qh Partners Limited',
     'children': [{'companyNo': '05990648',
       'companyName': 'Harrods Group (Holding) Limited',
       'parentCompanyNo': '06511479',
       'parentCompanyName': 'Qh Participations Limited',
       'children': [{'companyNo': 'Not Applicable',
         'companyName': 'Qatar Investment Authority',
         'parentCompanyNo': '05990648',
         'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]},
  'Qh Participations Limited': {'companyNo': '06511479',
   'companyName': 'Qh Participations Limited',
   'parentCompanyNo': '05961740',
   'parentCompanyName': 'Qh Partners Limited',
   'children': [{'companyNo': '05990648',
     'companyName': 'Harrods Group (Holding) Limited',
     'parentCompanyNo': '06511479',
     'parentCompanyName': 'Qh Participations Limited',
     'children': [{'companyNo': 'Not Applicable',
       'companyName': 'Qatar Investment Authority',
       'parentCompanyNo': '05990648',
       'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]},
  'Harrods Group (Holding) Limited': {'companyNo': '05990648',
   'companyName': 'Harrods Group (Holding) Limited',
   'parentCompanyNo': '06511479',
   'parentCompanyName': 'Qh Participations Limited',
   'children': [{'companyNo': 'Not Applicable',
     'companyName': 'Qatar Investment Authority',
     'parentCompanyNo': '05990648',
     'parentCompanyName': 'Harrods Group (Holding) Limited'}]},
  'Qatar Investment Authority': {'companyNo': 'Not Applicable',
   'companyName': 'Qatar Investment Authority',
   'parentCompanyNo': '05990648',
   'parentCompanyName': 'Harrods Group (Holding) Limited'}},
[{'companyName': 'HARRODS LIMITED',
  'companyNo': '00030209',
  'parentCompanyNo': 'PRIMARY',
  'parentCompanyName': 'PRIMARY',
  'children': [{'companyNo': '01889348',
    'companyName': 'Harrods (Uk) Limited',
    'parentCompanyNo': '00030209',
    'parentCompanyName': 'HARRODS LIMITED',
    'children': [{'companyNo': '01848143',
      'companyName': 'Harrods Holdings Limited',
      'parentCompanyNo': '01889348',
      'parentCompanyName': 'Harrods (Uk) Limited',
      'children': [{'companyNo': '05961740',
        'companyName': 'Qh Partners Limited',
        'parentCompanyNo': '01848143',
        'parentCompanyName': 'Harrods Holdings Limited',
        'children': [{'companyNo': '06511479',
          'companyName': 'Qh Participations Limited',
          'parentCompanyNo': '05961740',
          'parentCompanyName': 'Qh Partners Limited',
          'children': [{'companyNo': '05990648',
            'companyName': 'Harrods Group (Holding) Limited',
            'parentCompanyNo': '06511479',
            'parentCompanyName': 'Qh Participations Limited',
            'children': [{'companyNo': 'Not Applicable',
              'companyName': 'Qatar Investment Authority',
              'parentCompanyNo': '05990648',
              'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]}]}]}]
你的孩子是:

最后,如果公司记录不是其他公司的子公司,则将其从dict复制到新数组中

new_array
new_array = [record for company, record in companies.items()
             if company not in is_child]
新的_数组如下所示:

({'HARRODS LIMITED': {'companyName': 'HARRODS LIMITED',
   'companyNo': '00030209',
   'parentCompanyNo': 'PRIMARY',
   'parentCompanyName': 'PRIMARY',
   'children': [{'companyNo': '01889348',
     'companyName': 'Harrods (Uk) Limited',
     'parentCompanyNo': '00030209',
     'parentCompanyName': 'HARRODS LIMITED',
     'children': [{'companyNo': '01848143',
       'companyName': 'Harrods Holdings Limited',
       'parentCompanyNo': '01889348',
       'parentCompanyName': 'Harrods (Uk) Limited',
       'children': [{'companyNo': '05961740',
         'companyName': 'Qh Partners Limited',
         'parentCompanyNo': '01848143',
         'parentCompanyName': 'Harrods Holdings Limited',
         'children': [{'companyNo': '06511479',
           'companyName': 'Qh Participations Limited',
           'parentCompanyNo': '05961740',
           'parentCompanyName': 'Qh Partners Limited',
           'children': [{'companyNo': '05990648',
             'companyName': 'Harrods Group (Holding) Limited',
             'parentCompanyNo': '06511479',
             'parentCompanyName': 'Qh Participations Limited',
             'children': [{'companyNo': 'Not Applicable',
               'companyName': 'Qatar Investment Authority',
               'parentCompanyNo': '05990648',
               'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]}]}]},
  'Harrods (Uk) Limited': {'companyNo': '01889348',
   'companyName': 'Harrods (Uk) Limited',
   'parentCompanyNo': '00030209',
   'parentCompanyName': 'HARRODS LIMITED',
   'children': [{'companyNo': '01848143',
     'companyName': 'Harrods Holdings Limited',
     'parentCompanyNo': '01889348',
     'parentCompanyName': 'Harrods (Uk) Limited',
     'children': [{'companyNo': '05961740',
       'companyName': 'Qh Partners Limited',
       'parentCompanyNo': '01848143',
       'parentCompanyName': 'Harrods Holdings Limited',
       'children': [{'companyNo': '06511479',
         'companyName': 'Qh Participations Limited',
         'parentCompanyNo': '05961740',
         'parentCompanyName': 'Qh Partners Limited',
         'children': [{'companyNo': '05990648',
           'companyName': 'Harrods Group (Holding) Limited',
           'parentCompanyNo': '06511479',
           'parentCompanyName': 'Qh Participations Limited',
           'children': [{'companyNo': 'Not Applicable',
             'companyName': 'Qatar Investment Authority',
             'parentCompanyNo': '05990648',
             'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]}]},
  'Harrods Holdings Limited': {'companyNo': '01848143',
   'companyName': 'Harrods Holdings Limited',
   'parentCompanyNo': '01889348',
   'parentCompanyName': 'Harrods (Uk) Limited',
   'children': [{'companyNo': '05961740',
     'companyName': 'Qh Partners Limited',
     'parentCompanyNo': '01848143',
     'parentCompanyName': 'Harrods Holdings Limited',
     'children': [{'companyNo': '06511479',
       'companyName': 'Qh Participations Limited',
       'parentCompanyNo': '05961740',
       'parentCompanyName': 'Qh Partners Limited',
       'children': [{'companyNo': '05990648',
         'companyName': 'Harrods Group (Holding) Limited',
         'parentCompanyNo': '06511479',
         'parentCompanyName': 'Qh Participations Limited',
         'children': [{'companyNo': 'Not Applicable',
           'companyName': 'Qatar Investment Authority',
           'parentCompanyNo': '05990648',
           'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]},
  'Qh Partners Limited': {'companyNo': '05961740',
   'companyName': 'Qh Partners Limited',
   'parentCompanyNo': '01848143',
   'parentCompanyName': 'Harrods Holdings Limited',
   'children': [{'companyNo': '06511479',
     'companyName': 'Qh Participations Limited',
     'parentCompanyNo': '05961740',
     'parentCompanyName': 'Qh Partners Limited',
     'children': [{'companyNo': '05990648',
       'companyName': 'Harrods Group (Holding) Limited',
       'parentCompanyNo': '06511479',
       'parentCompanyName': 'Qh Participations Limited',
       'children': [{'companyNo': 'Not Applicable',
         'companyName': 'Qatar Investment Authority',
         'parentCompanyNo': '05990648',
         'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]},
  'Qh Participations Limited': {'companyNo': '06511479',
   'companyName': 'Qh Participations Limited',
   'parentCompanyNo': '05961740',
   'parentCompanyName': 'Qh Partners Limited',
   'children': [{'companyNo': '05990648',
     'companyName': 'Harrods Group (Holding) Limited',
     'parentCompanyNo': '06511479',
     'parentCompanyName': 'Qh Participations Limited',
     'children': [{'companyNo': 'Not Applicable',
       'companyName': 'Qatar Investment Authority',
       'parentCompanyNo': '05990648',
       'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]},
  'Harrods Group (Holding) Limited': {'companyNo': '05990648',
   'companyName': 'Harrods Group (Holding) Limited',
   'parentCompanyNo': '06511479',
   'parentCompanyName': 'Qh Participations Limited',
   'children': [{'companyNo': 'Not Applicable',
     'companyName': 'Qatar Investment Authority',
     'parentCompanyNo': '05990648',
     'parentCompanyName': 'Harrods Group (Holding) Limited'}]},
  'Qatar Investment Authority': {'companyNo': 'Not Applicable',
   'companyName': 'Qatar Investment Authority',
   'parentCompanyNo': '05990648',
   'parentCompanyName': 'Harrods Group (Holding) Limited'}},
[{'companyName': 'HARRODS LIMITED',
  'companyNo': '00030209',
  'parentCompanyNo': 'PRIMARY',
  'parentCompanyName': 'PRIMARY',
  'children': [{'companyNo': '01889348',
    'companyName': 'Harrods (Uk) Limited',
    'parentCompanyNo': '00030209',
    'parentCompanyName': 'HARRODS LIMITED',
    'children': [{'companyNo': '01848143',
      'companyName': 'Harrods Holdings Limited',
      'parentCompanyNo': '01889348',
      'parentCompanyName': 'Harrods (Uk) Limited',
      'children': [{'companyNo': '05961740',
        'companyName': 'Qh Partners Limited',
        'parentCompanyNo': '01848143',
        'parentCompanyName': 'Harrods Holdings Limited',
        'children': [{'companyNo': '06511479',
          'companyName': 'Qh Participations Limited',
          'parentCompanyNo': '05961740',
          'parentCompanyName': 'Qh Partners Limited',
          'children': [{'companyNo': '05990648',
            'companyName': 'Harrods Group (Holding) Limited',
            'parentCompanyNo': '06511479',
            'parentCompanyName': 'Qh Participations Limited',
            'children': [{'companyNo': 'Not Applicable',
              'companyName': 'Qatar Investment Authority',
              'parentCompanyNo': '05990648',
              'parentCompanyName': 'Harrods Group (Holding) Limited'}]}]}]}]}]}]}]
现在,将其全部放在一个漂亮的小函数中:

def remapper(array):

    companies = {record['companyName']:record for record in array}

    is_child = set()
    ​
    for company, record in companies.items():
        parent = record['parentCompanyName']

        if parent in companies:
            children = companies[parent].setdefault('children', list())
            children.append(record)
            is_child.add(company)

    return [record for company, record in companies.items()
                 if company not in is_child]

您可以使用递归就地解决这个问题,修改数组直到它只有一个根元素。此解决方案节省内存,因为它只在您开始使用的同一词典中移动引用,只在必要时创建新列表以容纳列表子项:

array = [
        {"companyName": "HARRODS LIMITED",
        "companyNo": "00030209",
        "parentCompanyNo": "PRIMARY",
        "parentCompanyName": "PRIMARY"},
        {"companyNo": "01889348",
        "companyName": "Harrods (Uk) Limited",
        "parentCompanyNo": "00030209",
        "parentCompanyName": "HARRODS LIMITED"},
        {"companyNo": "01848143",
        "companyName": "Harrods Holdings Limited",
        "parentCompanyNo": "01889348",
        "parentCompanyName": "Harrods (Uk) Limited"},
        {"companyNo": "05961740",
        "companyName": "Qh Partners Limited",
        "parentCompanyNo":"01848143",
        "parentCompanyName": "Harrods Holdings Limited"},
        {"companyNo": "06511479",
        "companyName": "Qh Participations Limited",
        "parentCompanyNo": "01848143",
        "parentCompanyName": "Harrods Holdings Limited"},
        {"companyNo": "06511479",
        "companyName": "Qh Participations Limited",
        "parentCompanyNo": "05961740",
        "parentCompanyName": "Qh Partners Limited"},
        {"companyNo": "05990648",
        "companyName": "Harrods Group (Holding) Limited",
        "parentCompanyNo":"06511479",
        "parentCompanyName": "Qh Participations Limited"},
        {"companyNo": "Not Applicable",
        "companyName": "Qatar Investment Authority",
        "parentCompanyNo": "05990648",
        "parentCompanyName": "Harrods Group (Holding) Limited"},
        {"companyNo": "06511479",
        "companyName": "Qh Participations Limited",
        "parentCompanyNo": "05961740",
        "parentCompanyName": "Qh Partners Limited"}
    ]

def add_to_tree(parent_candidate, item):
    if item['parentCompanyNo'] == parent_candidate['companyNo']:
        parent_candidate.setdefault('children',[]).append(item)
        return True

    return any(add_to_tree(x, item) for x in parent_candidate.get('children'))

def remap(arr):
    root = next(x for x in arr if x['parentCompanyNo'] == 'PRIMARY')
    while len(arr)>1:
        curIndex = next(i for i in range(len(arr)) if arr[i]['parentCompanyNo'] != "PRIMARY")
        curItem = array.pop(curIndex)
        any(add_to_tree(x, curItem) for x in arr)

remap(array)
import pprint
pprint.pprint(array)

根据您的需要,您的解决方案可能会大不相同。维持秩序重要吗?重要的是,孩子们也可以生孩子,还是只嵌套一次?会有多个顶级公司吗?这就是为什么你还想在最后列出一份清单的原因吗?@chet是的,可以有孩子的孩子,等等。Thanks@KarlKnechtel是-只有一家顶级公司-Thanks@tbowden卡塔尔投资局怎么了?为什么Qh Participations Limited没有出现在树中?