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”]
asmyDict[“main”][“foo”][“xyz”]
你想要所有的组合还是什么?@AntonvBR不,我想做一个函数来解释像myDict[“main”,“foo”,“xyz”]
asmyDict[“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并覆盖相同的值。美好的