包含使用路径的列表的Python访问字典

包含使用路径的列表的Python访问字典,python,json,list,dictionary,Python,Json,List,Dictionary,我有一个未定义深度的复杂嵌套列表,其中包含存储项目配置设置的json字典,该文件的一个片段: { "system_configuration": { "SYSLOGD_ARGS":"-n -O /var/log/messages" , "KLOGD_ARGS":"-n" , "dbus": { "location":"/usr/share/dbus-1/system.d/ab.conf" , "services": [

我有一个未定义深度的复杂嵌套列表,其中包含存储项目配置设置的json字典,该文件的一个片段:

{   
    "system_configuration": {
      "SYSLOGD_ARGS":"-n -O /var/log/messages"
    , "KLOGD_ARGS":"-n"
    , "dbus": {
          "location":"/usr/share/dbus-1/system.d/ab.conf"
        , "services": [
              "com.stezza.ab"
            , "com.stezza.keyboard"
            , "com.stezza.mpd"
            , "com.stezza.remote"
            , "com.stezza.volume" ]
    }
    , "wpa_supplicant": {
          "location":       "/etc/wpa_supplicant.conf"
        , "ctrl_interface": "/var/run/wpa_supplicant"
        , "update_config":  "1"
        , "network": [
              {   "ssid": "OpenWrt"
                , "psk":  "f22da64fa33936391b0ace4d544c63c5b340877327d31ad028296c875c0d8adb" }
            , {   "ssid": "SecondNetwork"
                , "psk":  "f22da64fa33936391b0ace4d544c63c5b340877327d31ad028296c875c0d8adb" } ]
    }
}
我将json文件加载到Python字典中

如果有这样的路径,正确的方法是什么:

/系统配置/dbus/1

应返回com.stezza.keyboard /系统配置/wpa\U请求者/网络/0/ssid

应该返回OpenWrt 背景,可能不相关,这个路径将通过一个flask-url到达我这里,作为RESTful API的一部分


我正在考虑拆分路径,在其上循环,并检查类型是否是处理列表的列表,但我觉得可能有一种更“pythonic”的方法来实现这一点。

因为可以使用方括号对字典和列表进行索引,所以不必区分两者。AFNP请求原谅,而不是许可是解决这类问题的一种方法

keys = path.split("/")
acc = json_dict
for key in keys:
    try:
        acc = acc[key]
    except TypeError, KeyError, IndexError:
        acc = None
        break

如果您希望始终在字典中查找条目,则更明智的做法是引发ValueError,而不是将acc设置为None。Python导入的Zen说,除非有意,否则永远不要让错误静静地传递。

您见过jsonpath吗?如果您的查询是$.system\u configuration.dbus.1,它将正常工作。搜索jsonpath将返回大量有用的资源。。有了正确的关键字,一切又变得不同了。谢谢