我有一个如下的字典来显示公司集团层次结构的关系。
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
现在我在这些根级别元素(公司的)之间具有父子关系,例如一个公司可能控制多家公司。 key C 是 key A 和 B 的父级。(公司 C 拥有公司 A 和 B) Key F 是 Key D 和 E 的父级。 最后, key G 是 C & F 的父级。
我需要创建一个新的字典,如下所示,或者创建一个如下所示的新字典。这个父子关系可以动态处理并得到下面的输出吗?如何拥有该父子关系,以便可以更新关系并更新输出。
{'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'],
}
有人可以分享我可以创建这个的代码吗?
最佳答案
假设您有另一个字典或其他将父项映射到子项的结构,您可以定义一个递归函数来获取不同键的所有“叶子”。如果树较大,您可能需要使用 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})
关于python - 获取字典的父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63594847/