我有几个字典看起来像这样:
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"]
答案 0 :(得分:3)
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
如果您真的希望字典在编辑中指示响应元组索引,则可以通过覆盖__getitem__
来实现,但您可能不希望这样做。
答案 1 :(得分:3)
您可以使用以下功能:
def lookup(theDict, theKeys):
val = theDict
for akey in theKeys:
val = val[akey]
return val
答案 2 :(得分:1)
也可以这样做:
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
答案 3 :(得分:0)
你可以简单地使用循环:
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