python - 如何处理节点字符串以获取它们的连接?
问题描述
我正在对节点树做一些工作,但我遇到了这个问题。此列表包含树的所有信息:
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'}
我想不出办法,这里的问题发生在最后一个节点周围,但我不知道如何解决它,关于如何解决这个问题的任何想法?
解决方案
首先创建父节点到子节点的映射,然后删除欺骗。
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()}
推荐阅读
- java - 如何从 .xlsx 读取数据并将数据转换为地图
- c# - 列出总和相同的项目范围
- ios - iOS:父视图覆盖的子视图阴影
- c# - Azure Cosmos DB (EF/Core) - ID 列包含类名
- firebase - Flutter 中的自定义通知声音
- mysql - 如何在 MySQL 查询中使用 count 和 CASE 条件?
- android - 我可以在 Playstore 中更改我的应用的 Playstore URL 吗?
- sql - 通过检查 SQL 中的多列来删除重复行
- python - 仅访问数据框的前 80% 列
- python - 无法在多台机器上运行 mpi4py 程序