python - 获取字典的父子关系

标签 python dictionary

我有一个如下的字典来显示公司集团层次结构的关系。

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/

相关文章:

c++ - 获取指向映射 C++ 中结构的指针

scala - 如何按值升序对 Scala 映射进行排序?

python - 列表的 get() 的惯用 python 等价物是什么?

python - AWS Lambda [错误]函数接受 1 个位置参数,但给出了 2 个

python - 我如何从 _ast.Dict 转换为实际的字典?

python - 随机 "int is not subscriptable"行为

python - Collections.Counter 如何实现快速排序?

python - 如何在seaborn分布图中填充曲线下的区域

python - 字符串列表,获取n个元素的公共(public)子串,Python

python - 将元组列表排序为多个列表的最佳方法和数据结构?