如何通过循环构建基于OS/Python/ML ID的三级嵌套字典?
构建三级嵌套字典实现兼容性数据分组
你可以通过逐层构建嵌套结构来实现需求,这里提供两种实用方案:
方法一:基础循环手动实现
通过判断每一层键的存在性,逐步创建字典和集合容器,最终将ml_id加入对应集合:
# 初始化空字典 compatibility_dict = {} for item in compatibility: os_id = item.os_id python_id = item.python_id ml_id = item.ml_id # 处理第一层:os_id对应的字典 if os_id not in compatibility_dict: compatibility_dict[os_id] = {} # 处理第二层:python_id对应的集合 if python_id not in compatibility_dict[os_id]: compatibility_dict[os_id][python_id] = set() # 将ml_id添加到目标集合 compatibility_dict[os_id][python_id].add(ml_id)
方法二:用collections.defaultdict简化代码
借助defaultdict自动生成缺失的嵌套结构,大幅简化代码逻辑:
from collections import defaultdict # 定义嵌套结构:外层字典的值是"值为集合的字典" compatibility_dict = defaultdict(lambda: defaultdict(set)) for item in compatibility: # 直接通过键路径添加元素,无需手动判断 compatibility_dict[item.os_id][item.python_id].add(item.ml_id) # 可选:转换为普通字典(如果不需要defaultdict特性) compatibility_dict = dict(compatibility_dict)
两种方法最终都会生成你需要的结构:
{1: {1: {1, 2}, 2: {1, 2}}, 2: {1: {1}, 2: {2, 3}}}
内容的提问来源于stack exchange,提问作者sohanur shanto
相关产品推荐
相关产品推荐

