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

如何通过迭代从两个字典提取键值生成按集群分组的合并字典?

字典合并实现方案

输入数据

dict_1(PIN码对应代码与概率)

dict_1 = {
    8063: {'code15': 99.61, 'code17': 96.14},
    9621: {'15': 88.59},
    1583: {'code17': 99.37, 'code14': 87.37},
    7631: {'code17': 99.88},
    4345: {'code11': 99.97, 'code12': 99.93},
    1799: {'code11': 99.8, 'code12': 99.18},
    3604: {'code17': 98.77},
    1098: {'code12': 99.96},
    3752: {'code11': 99.95}
}

dict_2(集群对应PIN与名称)

dict_2 = {
    0: {
        'count': 4,
        'id': [
            {'pin': 8063, 'name': 'John'},
            {'pin': 9621, 'name': 'Maria'},
            {'pin': 1583, 'name': 'Peter'},
            {'pin': 7631, 'name': 'Jess'}
        ]
    },
    3: {
        'count': 5,
        'id': [
            {'pin': 4345, 'name': 'George'},
            {'pin': 1799, 'name': 'Kevin'},
            {'pin': 3604, 'name': 'Sarah'},
            {'pin': 1098, 'name': 'Stewie'},
            {'pin': 3752, 'name': 'Jan'}
        ]
    }
}

预期输出

merged_dict = {
    0: {
        'code15': [99.61, 8063, 'John', 88.59, 9621, 'Maria'],
        'code17': [99.37, 1583, 'Peter', 96.14, 8063, 'John', 99.88, 7631, 'Jess'],
        'code14': [87.37, 1583, 'Peter']
    },
    3: {
        'code11': [99.97, 4345, 'George', 99.8, 1799, 'Kevin', 99.95, 3752, 'Jan'],
        'code12': [99.93, 4345, 'George', 99.18, 1799, 'Kevin', 99.96, 1098, 'Stewie']
    }
}

(注:你提供的原始预期输出中集群0的code17包含了集群3的3604数据,属于输入对应错误,上述预期输出已修正为符合输入逻辑的结果)

实现代码

# 初始化合并字典
merged_dict = {}

# 遍历每个集群
for cluster_id, cluster_info in dict_2.items():
    merged_dict[cluster_id] = {}
    # 遍历集群内的每个PIN项
    for pin_item in cluster_info['id']:
        pin = pin_item['pin']
        name = pin_item['name']
        # 获取当前PIN对应的代码与概率,若不存在则返回空字典
        code_prob_map = dict_1.get(pin, {})
        
        for code, prob in code_prob_map.items():
            # 统一代码格式:给无'code'前缀的键添加前缀
            if not code.startswith('code'):
                code = f'code{code}'
            # 若当前代码未在集群字典中,初始化空列表
            if code not in merged_dict[cluster_id]:
                merged_dict[cluster_id][code] = []
            # 添加概率、PIN、名称到对应列表
            merged_dict[cluster_id][code].extend([prob, pin, name])

# 输出结果
print(merged_dict)

代码说明

  • 遍历dict_2的每个集群,为每个集群初始化空字典存储合并结果
  • 对每个集群内的PIN项,从dict_1中获取对应的代码与概率映射
  • 统一代码命名格式(处理9621对应的'15'转为'code15'的情况)
  • 将每个代码对应的概率、PIN、名称按顺序追加到对应列表中
  • 自动忽略dict_1中不存在的PIN(若有),避免程序报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:35:20