【问题标题】:Solutions for a Dynamic Infinite Tree Structure in PythonPython中动态无限树结构的解决方案
【发布时间】:2019-10-21 19:45:08
【问题描述】:

我正在尝试构建一个树结构,从点 1 开始,它可以分支到无限的方向。每个点都可以通往无限的其他点(1.1、1.2、1.3、...),每个点也可以通往无限的点(1.1.1、1.2.1、1.2.2、...)。

我的计划是在每个点存储一个对象,并能够通过位置 1.1.1 等来引用它们。另外我决定动态生成每个点,所以树从 1 开始,只有在对象存在时才会分支已创建。

因为我倾向于使事情过于复杂,所以我使用了嵌套字典,所以我可以使用 dict[1][1]["data"] 来引用一个对象,但我正在努力使用无限嵌套字典:

如果“[1]”的数量不同,我如何使用字典? (想想dict[1][1][1]....[1]["data"])。

我可以简单地遍历字典来查找数据,比如

for i in [1.1.1]:
    point = dict[i]

但是当“[1]”的数量未知时,我找不到打开新字典分支或存储数据的方法。

基本上,我想知道是否存在更简单的解决方案以及如何处理太多嵌套的“[]”括号。

【问题讨论】:

  • 你的问题是如何构造这个嵌套的字典或从中检索值?

标签: python dictionary tree nested


【解决方案1】:

您可能想要一种与使用 [] 不同的检索值的方式,因为正如您所说,当您不知道某事有多深时,这很难做到。

相反,您可以使用简单的递归函数,并使用列表代替字符串:

def fetch_field(subtree, key_list):
    if not key_list:
        return subtree["data"]

    return fetch_field(subtree[key_list[0]], key_list[1:])

key = "1.2.1.3"
# Instead of using a string, split it into a list:
key = key.split(".")
fetch_field(tree, key)

如果您愿意,您可以调整函数以接受字符串而不是数组,我个人更喜欢使用列表而不是乱搞字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2019-06-26
    相关资源
    最近更新 更多