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

如何找到间接关系?[Python],python,dictionary,recursion,boolean,relation,Python,Dictionary,Recursion,Boolean,Relation,所以我试图在字典中找到间接关系,但我似乎找不到我的程序的通用代码:这就是我所拥有的 #find if A is related to E data = {"A": {"B": 5, "C": 7}, "B": {"E": 8}, "C": {}, "D": {}, "E": {"D": 9}} if "E&q

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

#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来概括它,但是如果我有一个带有complexer字典的数据变量,它就不起作用了。可能是递归代码还是for循环?如果有人能帮忙,我们将不胜感激

提前感谢您提供数据项中的k、v。项目: 对于数据项中的l、u: 如果k在u中: printf{k}in{u} 因此,所需的功能可能是:

def具有以下间接关系: 对于dico项目中的k、v: 对于dico项目中的l、u: 如果k在u中:返回True 返回错误
首先,这些数字对当前的问题不感兴趣,所以让我们将数据从字典的dict减少到集合的dict:

我们可以递归地搜索数据:

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'))

这回答了你的问题吗?如果我们试图回答这个问题,找出A是否与E相关,那么这将返回True,数据{A:{B,C},C:{}甚至没有E!它只回答了一个问题,即数据中是否存在任何间接关系。
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'))