字典get方法遇None未返回默认值,如何一行代码实现需求?
解决方案
问题根源在于字典的get()方法仅在目标键不存在时才返回默认值;如果键存在但对应值为None,get()会直接返回None,导致后续调用.get("truc")时触发AttributeError(因为None对象没有get方法)。
可以用一行代码实现需求,核心思路是判断d.get("a")的结果是否为None,如果是则使用默认字典{},再继续取值:
(d.get("a") or {}).get("truc")
如果需要给"truc"设置默认返回值,只需在第二个get()中添加参数:
(d.get("a") or {}).get("truc", "默认值")
补充说明
or运算符在这里的作用是:当d.get("a")为None(或其他布尔值为False的对象,比如空字符串、0等)时,会返回{};如果d.get("a")是有效的字典,则直接使用该字典。- 如果需要严格仅在值为
None时才使用默认字典(排除其他假值),可以改用三元表达式:(d.get("a") if d.get("a") is not None else {}).get("truc")
内容的提问来源于stack exchange,提问作者MathAng
相关产品推荐
相关产品推荐

