包含使用路径的列表的Python访问字典
我有一个未定义深度的复杂嵌套列表,其中包含存储项目配置设置的json字典,该文件的一个片段:包含使用路径的列表的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": [
{
"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将返回大量有用的资源。。有了正确的关键字,一切又变得不同了。谢谢