Python 将一个节点连接到将来要创建的另一个节点
我正在用Python为节点和连接的文本文件编写解析器。Python 将一个节点连接到将来要创建的另一个节点,python,data-structures,Python,Data Structures,我正在用Python为节点和连接的文本文件编写解析器。 例如,文本文件如下所示: a b b <-> a # exists a connection between a/b c d d <-> e # PROBLEM! this node connect to another node not yet being created e 解决这一问题的直观方法是延迟连接阶段,但这表明解析必须分为两部分,节点对象必须处理原始文本 #blah blah
例如,文本文件如下所示:
a
b
b <-> a # exists a connection between a/b
c
d
d <-> e # PROBLEM! this node connect to another node not yet being created
e
解决这一问题的直观方法是延迟连接阶段,但这表明解析必须分为两部分,节点对象必须处理原始文本
#blah blah
for line in raw:
if is_node(line):
add_node(NodeBuilder(line))
elif is_connection(line):
nameEndA, nameEndB = parse_connection(line)
endA = nodeDict[nameEndA]
try:
endB = nodeDict[nameEndB]
endA.connect(endB)
except KeyError:
endA.txt2Parse(line)
for node in nodes:
if node.txt2Parse:
node.parse_and_connect() # has to parse raw data in Node object!!!
有没有更好的方法来设计它而不使用糟糕的封装?假设
parse\u connection(line)
返回节点的字符串名称,
你可以用
for name in (nameEndA, nameEndB):
if not name in nodeDict:
add_node(NodeBuilder(name))
在建立连接之前添加节点
在从
nodeDict
访问节点名称之前添加检查:
for line in raw:
if is_node(line):
add_node(NodeBuilder(line))
elif is_connection(line):
nameEndA, nameEndB = parse_connection(line)
for name in (nameEndA, nameEndB):
if not name in nodeDict:
add_node(NodeBuilder(name))
endA = nodeDict[nameEndA]
endB = nodeDict[nameEndB]
endA.connect(endB)
如果这是您认为可以改进的工作代码,请参阅。如果没有,请给出一个清晰的示例,说明问题所在。
for line in raw:
if is_node(line):
add_node(NodeBuilder(line))
elif is_connection(line):
nameEndA, nameEndB = parse_connection(line)
for name in (nameEndA, nameEndB):
if not name in nodeDict:
add_node(NodeBuilder(name))
endA = nodeDict[nameEndA]
endB = nodeDict[nameEndB]
endA.connect(endB)