使用字符串列表遍历字典python

时间:2015-07-07 16:51:25

标签: python list dictionary traversal

我在python中有一个表示目录结构的字典,所以像

dict = {
    "file1.java": {
          "method1": [],
          "method2": []
     },
     "dir1": {
          "file2.java":{
           .
           .
           .
           },
           "dir2": {
                    "file3.java": {
                           "method3": ["hello", "hi"],
                           "method4": []
                    "file4.java": {
            }
     }

}

我也有一个像

这样的字符串列表
list = ["dir1", "dir2", "file3.java", "method3"]

是否有一种简单的方法来遍历字典以使用列表访问method3中的数据 所以我希望能够致电

dict[list]

让它做类似

的事情
 dict["dir1"]["dir2"]["file3.java"]["method3"]

并返回类似

的内容
["hello", "hi"]

但我不知道字符串列表会有多长,所以列表

list = ["file1.java","method1"]

也需要工作

2 个答案:

答案 0 :(得分:1)

您可以使用reduce内置功能。<​​/ p>

db = {
    "file1.java": {
          "method1": [],
          "method2": []
     },
     "dir1": {
           "dir2": {
                    "file3.java": {
                           "method3": ["hello", "hi"],
                           "method4": []
                    },
                    "file4.java": {
                    }
            }
     }

}

def lookup(db, path):
    return reduce(dict.get, path, db)

print lookup( db, ["dir1", "dir2", "file3.java", "method3"] )


print lookup( db, ["file1.java","method1"] )

答案 1 :(得分:0)

你可以利用dicts和数组是引用类型的事实来做这样的事情......

current_entry = dict
for item in list:
    current_entry = current_entry[item]

# The element you want is now in current_entry

当然,添加适当的错误检查以确保您不会尝试选择不存在的dict元素。