获取字典的父子关系

2024-09-30 08:21:09 发布

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

我有一个口述如下,以显示集团公司层次结构的关系

dict = {}

dict["A"] = ['Company A']
dict["B"] = ['Company B']
dict["C"] = ['Company C'] # This can be removed if necessary
dict["D"] = ['Company D']
dict["E"] = ['Company E'] 
dict["F"] = ['Company F'] # This can be removed if necessary
dict["G"] = ['Company G'] # This can be removed if necessary

现在我有了这些根级别元素(公司)之间的父子关系,例如一个公司可能控制多个公司。 密钥C是密钥A&;B.(C公司拥有A公司和B公司) 键F是键D&;E 最后,键G是C&;F

我需要创建一个新的dict,如下所示,或者创建一个如下所示的新dict。可以动态处理此父子关系并获得以下输出。如何拥有该父子关系,以便能够更新关系并更新输出

{'A': ['Company A'],
 'B': ['Company B'],
 'C': ['Company A', 'Company B'],
 'D': ['Company D'],
 'E': ['Company E'],
 'F': ['Company D', 'Company E'],
 'G': ['Company A', 'Company B','Company D', 'Company E'],
}

有人可以分享我可以创建这个的代码吗


Tags: if关系密钥公司bethiscandict
2条回答

假设您有另一个字典或其他结构将父项映射到其子项,您可以定义一个递归函数来获取不同键的所有“叶”。如果树较大,您可能希望使用functools.lru_cache来记忆和重用过去的部分结果

from functools import lru_cache

d = {'A': ['Number A'], 'B': ['Number B'],
     'C': ['Number C'], 'D': ['Number D'],
     'E': ['Number E'], 'F': ['Number F'],
     'G': ['Number G']}

is_parent_of = {'C': ['A', 'B'], 'F': ['D', 'E'], 'G': ['C', 'F']}

@lru_cache(None) # optional, for caching
def get_leafs(x):
    if x in is_parent_of:
        return [z for y in is_parent_of[x] for z in get_leafs(y)]
    else:
        return d[x]

print({x: get_leafs(x) for x in d})

您只需创建另一个字典,将所有父项及其子项定义到该字典中,并在当前字典上循环,如果发现有任何键与父项字典中的任何键匹配,则结果字典应继承其值

talk很便宜让我给你看一些代码

范例

dictionary = {}
dictionary["A"] = ['Number A']
dictionary["B"] = ['Number B']
dictionary["C"] = ['Number C']
dictionary["D"] = ['Number D']
dictionary["E"] = ['Number E'] 
dictionary["F"] = ['Number F']
dictionary["G"] = ['Number G']

parents = {
    'C': ['Number A', 'Number B'],
    'F': ['Number D', 'Number E'],
    'G': ['Number A', 'Number B','Number D', 'Number E'],
}

res = {}

for x, y in dictionary.items():
    if x in parents.keys():
        res[x] = parents[x]
    else:
        res[x] = y

print(res)

相关问题 更多 >

    热门问题