Python:在字典中搜索文本

时间:2017-02-24 05:33:33

标签: python regex dictionary findall

我有一个像这样的列表字典

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. 输入有效的节点名称
  3. 输出此节点的子节点和
  4. 如果此节点是任何其他节点的子节点,则输出
  5. 我面临的问题是,如果某个节点有多个名称,并且用户输入任何一个有效名称,我应该打印正确的输出。

    例如:对于上图,以下是一些有效输入

    1. funcName1 / funcName2 / funcName3
    2. funcName1
    3. funcName2
    4. funcName3
    5. 案例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。最简单的方法是什么?

      注意:这是较大脚本的一部分,我无法更改图形数据结构。

0 个答案:

没有答案