如何找到间接关系? [Python]

How to find indirect relation? [Python]

所以我试图在字典中查找间接关系,但我似乎无法为我的程序找到通用代码:这就是我所拥有的

#find if A is related to E
data = {"A": {"B": 5, "C": 7}, "B": {"E": 8}, "C": {}, "D": {}, "E": {"D": 9}}
if "E" in data["A"]:
    result = True
if "E" in data["B"] or "D" in data["C"]:
    result = True
else:
    result = False
print(result)
#output = True because "E" is in data["A"]

对于这个例子,它可以工作,当然我可以用 x 和 y 来概括它,但是如果我有一个数据变量和一个更复杂的字典,它就不会工作。也许是递归代码或 for 循环?如果有人能提供帮助,将不胜感激。

提前致谢

for k,v in data.items():
    for l,u in data.items():
        if k in u:
            print(f"{k} in {u}")

因此所需的功能可能是:

def has_indirect_rel(dico):
    for k,v in dico.items():
        for l,u in dico.items():
            if k in u: return True
    return False

首先,数字与手头的问题无关,所以让我们将数据从 dict 个字典减少到 dict 个集合:

data = {'A': {'B', 'C'}, 'B': {'E'}, 'C': {}, 'D': {}, 'E': {'D'}}

我们可以递归搜索数据:

def has_relation(mapping, a, b):
    if b in mapping[a]:
        return True

    for c in mapping[a]:
        if has_relation(mapping, c, b):
            return True

    return False

print(has_relation(data, 'A', 'D'))
print(has_relation(data, 'A', 'E'))
print(has_relation(data, 'A', 'F'))