from typing import Any, Optional, Dict def get_with_default(dict_obj: dict, key: Any, default: Optional[Any] = None): """ 从字典中取得对应的值,若为 None,则返回默认值。 注意,字典自带 get 方法是当 key 存在,则返回对应的值,无论是否为 None; 而该方法是无论 key 是否存在,只要值为 None 均返回默认值。 :param dict_obj: 字典对象 :param key: 键 :param default: 默认值 """ _val = dict_obj.get(key, default) if _val is None: _val = default return _val def get_by_path(dict_obj: Dict[str, Any], path: str, default: Optional[Any] = None): """ 按路径取得字典中的数据。要求路径指向的也必须是字典,除最后一项。 :param dict_obj: 字典对象 :param path: 字典中的 key 路径,以"."号分隔 :param default: 默认值 :return: """ _dict: Optional[Dict[str, Any]] = dict_obj _keys = path.split(".") if len(_keys) > 1: # 遍历到倒数第二项 for _key in _keys[:-1]: _dict = _dict.get(_key, None) if not isinstance(_dict, dict): return default # 返回最后一项内容 return _dict.get(_keys[-1], default)