相关疑难解决方法(0)

通过键列表访问嵌套的字典项?

我有一个复杂的字典结构,我想通过一个键列表访问,以解决正确的项目.

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)

python dictionary list

128
推荐指数
5
解决办法
10万
查看次数

检查python dict中是否存在嵌套键的优雅方法

是否有更可读的方法来检查埋在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如果所有级别都存在则返回

python variables object

53
推荐指数
6
解决办法
4万
查看次数

标签 统计

python ×2

dictionary ×1

list ×1

object ×1

variables ×1