【问题标题】:How to find indirect relation? [Python]如何找到间接关系? [Python]
【发布时间】:2020-12-12 08:36:58
【问题描述】:

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

#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 循环?如果有人可以提供帮助,将不胜感激。

提前谢谢你

【问题讨论】:

标签: python dictionary recursion boolean relation


【解决方案1】:
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

【讨论】:

  • 如果我们试图回答这个问题,“查找 A 是否与 E 相关”,那么这将返回 True 和数据 {"A": {"B", "C"}, "C": {}},甚至没有 E!它只回答了这个问题,数据中是否存在任何间接关系。
【解决方案2】:

首先,数字与当前的问题无关,所以让我们将数据从字典的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'))

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多