Python 使用列表从嵌套字典中获取值

Python 使用列表从嵌套字典中获取值,python,python-3.x,Python,Python 3.x,我有几本字典看起来像这样: myDict = { "main": { "foo": { "xyz": "lorem", "abc": "ipsum" }, "bar": { "xyz": "dolor", "abc": "sit" } } } 如何使用给定列表(如[“main”、“foo”、“xyz”]或[“main”、

我有几本字典看起来像这样:

myDict = {
    "main": {
        "foo": {
            "xyz": "lorem",
            "abc": "ipsum"
        },
        "bar": {
            "xyz": "dolor",
            "abc": "sit"
        }
    }
}
如何使用给定列表(如
[“main”、“foo”、“xyz”]
[“main”、“bar”、“abc”]
作为导航嵌套字典的键)检索这些值

因此它会将类似于
myDict[“main”、“foo”、“xyz”]
的内容解释为
myDict[“main”][“foo”][“xyz”]

from functools import reduce
def path_lookup(my_dict, path):
  return reduce(lambda d, ks: d[ks], path, my_dict)

print(path_lookup(myDict, ["main", "bar", "abc"])) # prints sit
如果您确实希望字典按照您在编辑中的指示响应元组索引,您可以通过覆盖
\uuu getitem\uuuu
来实现,但您可能不想这样做


如果您确实希望字典按照您在编辑中的指示响应元组索引,您可以通过重写
\uuu getitem\uuuu
来实现,但您可能不想这样做。

您可以使用以下函数:

def lookup(theDict, theKeys):
    val = theDict
    for akey in theKeys:
        val = val[akey]
    return val

您可以使用如下函数:

def lookup(theDict, theKeys):
    val = theDict
    for akey in theKeys:
        val = val[akey]
    return val

只需使用循环即可:

query = ["main", "foo", "xyz"]
myDict = {
    "main": {
        "foo": {
            "xyz": "lorem",
            "abc": "ipsum"
        },
        "bar": {
            "xyz": "dolor",
            "abc": "sit"
        }
    }
}
subdict = myDict
for key in query:
    if key in subdict.keys():
        subdict = subdict[key]
    else:
        print("Invalid query!")
        break
value = subdict

只需使用循环即可:

query = ["main", "foo", "xyz"]
myDict = {
    "main": {
        "foo": {
            "xyz": "lorem",
            "abc": "ipsum"
        },
        "bar": {
            "xyz": "dolor",
            "abc": "sit"
        }
    }
}
subdict = myDict
for key in query:
    if key in subdict.keys():
        subdict = subdict[key]
    else:
        print("Invalid query!")
        break
value = subdict
我也可以这样做:

def func(d, l):
    while l:
        d = d[l.pop(0)]
    return d

print(func(myDict,["main","foo","xyz"]))
返回:

'lorem'
或类似于上述内容:

def func(d, l):
    for k in l:
        d = d[k]
    return d
我也可以这样做:

def func(d, l):
    while l:
        d = d[l.pop(0)]
    return d

print(func(myDict,["main","foo","xyz"]))
返回:

'lorem'
或类似于上述内容:

def func(d, l):
    for k in l:
        d = d[k]
    return d

你想要所有的组合还是什么?@AntonvBR不,我想做一个函数来解释像
myDict[“main”,“foo”,“xyz”]
as
myDict[“main”][“foo”][“xyz”]
你想要所有的组合还是什么?@AntonvBR不,我想做一个函数来解释像
myDict[“main”,“foo”,“xyz”]
as
myDict[“main”][“foo”][“xyz”]
python3.x以便
print
需要包装在parensi中如果它是python3,reduce也不存在,并且必须从functools导入:/updateng我如何设置这样的值?在传递到reduce之前,弹出路径的最后一个键,存储最终的字典,然后使用弹出的key.python3.x执行set操作,以便
print
需要包装在parensif它是python 3,reduce也不存在并且必须从functools导入:/updateng我如何设置这样的值?在传递到reduce之前,弹出路径的最后一个键,存储最终的字典,然后用弹出的键执行设置操作。是的,但我们可以将val更改为DICT并覆盖相同的值。美好的是的,但我们可以将val更改为DICT并覆盖相同的值。美好的