如何找到间接关系? [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'))
所以我试图在字典中查找间接关系,但我似乎无法为我的程序找到通用代码:这就是我所拥有的
#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'))