许多SO贴展示了如何高效地检查字典中键的存在性,例如,Check if a given key already exists in a dictionary
那么,如何对于多级键进行此操作呢?例如,如果d["a"]["b"]
是一个字典,如何检查d["a"]["b"]["c"]["d"]
是否存在,而不像这样做一些可怕的事情:
if "a" in d and isInstance(d["a"], dict) and "b" in d["a"] and isInstance(d["a"]["b"], dict) and ...
是否有类似于
这样的语法if "a"/"b"/"c"/"d" in d
我实际上使用它的目的是:我们有一些JSON数据,使用 simplejson
解析成字典,我需要从中提取值。有些值嵌套了三到四层;但有时候这个值根本不存在。所以我想要像这样的东西:
val = None if not d["a"]["b"]["c"]["d"] else d["a"]["b"]["c"]["d"] #here d["a"]["b"] may not even exist
编辑: 如果某些子键存在但不是字典,例如 d["a"]["b"] = 5
,则最好不要崩溃。
simplejson
将对象解包到其中,而不是普通的字典。 - mobiusklein