2015-04-15 49 views
2

我有这样的结构:如何通过键获取字典及其所有元素?

{ 
    "content": "Name 1", 
    "name": "directory", 
    "decendent": [ 
     { 
      "content": "Name 2", 
      "name": "subdirectory", 
      "decendent": None 
     }, 
     { 
      "content": "Name 3", 
      "name": "subdirectory_two", 
      "decendent": [ 
       { 
        "content": "Name 4", 
        "name": "subsubdirectory", 
        "decendent": None 
       } 
      ] 
     } 
    ] 
} 

我要寻找的姓名(名称是一个字符串,唯一的),如果我发现了它 - 保存在其他变量整个字典。例如: -

我在寻找“子目录”,我应该得到:

 { 
      "content": "Name 2", 
      "name": "subdirectory", 
      "decendent": None 
     } 

,并将其保存在变量。

如何在Python中执行此搜索?

+0

递归是你的朋友。 –

+1

你不能得到'null',因为它不是Python中的有效文字。你是不是指“没有”? – thefourtheye

+0

@thefourtheye:是的,没有。 – paus

回答

3

您可以使用递归函数检查当前字典的名称,如果该名称匹配返回字典,否则尝试“后代”(如果有的话),如果匹配,则返回。

def find_name(d, name): 
    if d["name"] == name: 
     return d 
    for d2 in d["decendent"] or []: 
     res = find_name(d2, name) 
     if res: 
      return res 

例子:

>>> dictionary = { your dictionary } 
>>> print find_name(dictionary, "subdirectory") 
{'content': 'Name 2', 'name': 'subdirectory', 'decendent': None} 
+0

如果我是OP,我会让一个没有后代的目录保留一个空列表而不是'None'。这将使API更加一致。它可以让你摆脱'或[]'。 –

相关问题