首页 > 解决方案 > 如何处理节点字符串以获取它们的连接?

问题描述

我正在对节点树做一些工作,但我遇到了这个问题。此列表包含树的所有信息:

connections = ['Module/Expr/ListComp/BinOp/Name/id/i/',
           'Module/Expr/ListComp/BinOp/Sub/',
           'Module/Expr/ListComp/BinOp/Num/0.5/',
           'Module/Expr/ListComp/comprehension/Name/id/i/',
           'Module/Expr/ListComp/comprehension/Name/id/inp/']

我需要将其转换为:

{'Module':'Expr', 'Expr':'ListComp', 'ListComp':'BinOp comprehension', 
'BinOp':'Name Sub Num', 'Name':'id', 'id':'i', 'Num':'0.5', 
'comprehension':'Name', 'Name':'id', 'id':'i inp'}

目标是将连接解析为结构字典{'parent':'child(s)'}。为了做到这一点,我已经尝试过:

rules = {}
connections_list = [[word for word in path.split("/") if word] for path in connections]

for path in connections_list:
    for i, word in enumerate(path):
        same_level = [y[i+1] for y in connections_list if len(connections_list) > i+1]
        if same_level:
            unique_on_level = list(set(same_level))
            rules.update({word:" ".join(unique_on_level)})
        else:
            pass
    break
print(rules)

输出:

{'Module': 'Expr',
 'Expr': 'ListComp',
 'ListComp': 'BinOp comprehension',
 'BinOp': 'Num Sub Name'}

我想不出办法,这里的问题发生在最后一个节点周围,但我不知道如何解决它,关于如何解决这个问题的任何想法?

标签: pythonarrayspython-3.xstring

解决方案


首先创建父节点到子节点的映射,然后删除欺骗。

rules = {}
for connection in connections:
    parts = connection.rstrip("/").split("/")
    for parent, child in zip(parts, parts[1:]):
        if parent not in rules:
            rules[parent] = []
        rules[parent].append(child)

rules = {k: " ".join({}.fromkeys(v)) for k, v in rules.items()}

推荐阅读