我有一个复杂的字典结构,我想通过一个键列表访问,以解决正确的项目.
dataDict = {
"a":{
"r": 1,
"s": 2,
"t": 3
},
"b":{
"u": 1,
"v": {
"x": 1,
"y": 2,
"z": 3
},
"w": 3
}
}
maplist = ["a", "r"]
Run Code Online (Sandbox Code Playgroud)
要么
maplist = ["b", "v", "y"]
Run Code Online (Sandbox Code Playgroud)
我已经制作了以下代码,但是我确信如果有人有想法,有更好更有效的方法.
# Get a given data from a dictionary with position provided as a list
def getFromDict(dataDict, mapList):
for k in mapList: dataDict = dataDict[k]
return dataDict
# Set a given data in a dictionary with position provided as a list
def …Run Code Online (Sandbox Code Playgroud) 是否有更可读的方法来检查埋在dict中的密钥是否存在而不是单独检查每个级别?
假设我需要在埋藏的对象中获取此值(示例来自维基数据):
x = s['mainsnak']['datavalue']['value']['numeric-id']
Run Code Online (Sandbox Code Playgroud)
为了确保这不会以运行时错误结束,有必要检查每个级别,如下所示:
if 'mainsnak' in s and 'datavalue' in s['mainsnak'] and 'value' in s['mainsnak']['datavalue'] and 'nurmeric-id' in s['mainsnak']['datavalue']['value']:
x = s['mainsnak']['datavalue']['value']['numeric-id']
Run Code Online (Sandbox Code Playgroud)
我能想到解决这个问题的另一种方法是将它包装成一个try catch构造,我觉得这个简单的任务也很尴尬.
我正在寻找类似的东西:
x = exists(s['mainsnak']['datavalue']['value']['numeric-id'])
Run Code Online (Sandbox Code Playgroud)
True如果所有级别都存在则返回