我有一个像这样的列表字典
insGraph =
{'funcA': ['funcZ', 'funcB', 'funcName1 / funcName2 / funcName3'],
'funcB': ['funcD', 'funcE'],
'funcName1 / funcName2 / funcName3': ['funcG', 'funcF]}
如果以图形绘制上述内容,
funcA
|- funcZ
|- funcB
| |- funcD
| |- funcE
|- funcName1 / funcName2 / funcName3
|- funcG
|- funcF
如您所见,元素的名称可以采用<name1> / <name2> / <name3>
我的目标是
我面临的问题是,如果某个节点有多个名称,并且用户输入任何一个有效名称,我应该打印正确的输出。
例如:对于上图,以下是一些有效输入
案例1是直截了当的,我搜索图表中的键并打印输出。
但是如果用户输入案例2到4中的任何一个值,我就无法从该输入中获取密钥名称。
我尝试了以下内容,
def validateInstruction(inputName):
# Check if the instruction is present in the instruction graph
if not insGraph.has_key(inputName):
print 'Checking for any matching instruction...'
insStr = str(insGraph).split()
for key, children in insGraph.items():
# Search the children list
ins = re.findall(inputName, str(children))
if len(ins) != 0:
print ins
else:
# Search the pattern in key
ins = re.findall(inputName, str(key))
if len(ins) != 0:
print ins
这将输入名称与键/子列表匹配。但变量ins
不包含格式为&#39; name1 / name2 / name3&#39;的整个字符串。如果funcName1
是输入,我应该从图中提取字符串funcName1 / funcName2 / funcName3
。最简单的方法是什么?
注意:这是较大脚本的一部分,我无法更改图形数据结构。