You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化含列表的字典路径值存在性检查,封装通用函数

字典路径含列表的通用取值函数实现

问题背景

已有类似字典路径取值方案,但未覆盖路径中间包含列表的场景。目前通过try-except可实现指定路径的取值(路径不存在则返回"N/A"),但该逻辑重复使用多次,需要封装为通用函数。自行编写的check_dict_path函数无法处理路径中的列表,请求解决。

现有可行实现

try:
    recommendation["serviceRecommendationOptions"][0]["containerRecommendations"][0]["cpu"]
except (KeyError, IndexError):
    cpu_size = "N/A"
else:
    cpu_size = str(
        recommendation["serviceRecommendationOptions"][0][
            "containerRecommendations"
        ][0]["cpu"]
    )

尝试失败的函数

def check_dict_path(d, *indices):
    sentinel = object()
    for index in indices:
        d = d.get(index, sentinel)
        if d is sentinel:
            return False
    return True


test_dict = {1: {'blah': [{'blob': 4}]}}

print(check_dict_path(test_dict, 1, 'blah', 0, 'blob')) # Fails
print(check_dict_path(test_dict, 1, 'blah', 0, 'rob')) # Fails

解决方案

失败原因是原函数仅使用字典的get()方法,而列表不支持该方法。改用try-except遍历路径节点,可同时兼容字典的key和列表的索引:

def get_dict_path_value(d, *path, default="N/A"):
    current = d
    try:
        for key_or_index in path:
            current = current[key_or_index]
        return str(current) if not isinstance(current, str) else current
    except (KeyError, IndexError, TypeError):
        return default

测试示例

# 测试用字典
test_dict = {1: {'blah': [{'blob': 4}]}}

# 路径存在的情况
print(get_dict_path_value(test_dict, 1, 'blah', 0, 'blob')) # 输出: 4
# 路径不存在的情况
print(get_dict_path_value(test_dict, 1, 'blah', 0, 'rob')) # 输出: N/A

# 原需求场景测试
recommendation = {
    "serviceRecommendationOptions": [
        {
            "containerRecommendations": [
                {"cpu": 2}
            ]
        }
    ]
}
cpu_size = get_dict_path_value(recommendation, "serviceRecommendationOptions", 0, "containerRecommendations", 0, "cpu")
print(cpu_size) # 输出: 2

函数说明

  • 接收目标字典d和可变参数path(路径节点,可混合字典key和列表索引)
  • 遍历路径节点逐个取值,若中途出现KeyError(字典key不存在)、IndexError(列表索引越界)或TypeError(非可索引对象),则返回默认值default
  • 最终返回路径对应的取值(非字符串类型自动转为字符串),或默认值"N/A"

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:08:17