不使用pandas按条件合并两个字典列表并新增predict_labels字段
纯Python实现指定条件合并两个字典列表(无需pandas)
实现核心逻辑:不需要引入pandas等第三方库,基于原生Python语法按照给定3个条件完成匹配,将x2的predict_labels字段补充到x1对应元素中。
注意匹配细节:x1的
fact_group为字符串类型,x2的group为浮点数类型,匹配前需要统一数据类型,否则会出现匹配失败的问题。
实现代码
# 第一步:预处理x2构建分组规则索引,大幅提升后续匹配效率,适合x2数据量较大的场景 group_rule_map = {} for rule in x2: # 将group转为字符串和x1的fact_group类型对齐 group_key = str(rule['group']) if group_key not in group_rule_map: group_rule_map[group_key] = [] group_rule_map[group_key].append(rule) # 第二步:遍历x1匹配规则生成结果 x3 = [] for item in x1: # 复制原字典避免修改x1原始数据 new_item = item.copy() fact_group = item['fact_group'] prob = item['probability'] # 读取对应分组的所有区间规则 rules = group_rule_map.get(fact_group, []) for rule in rules: # 匹配区间条件 if rule['predict_intervals_min'] <= prob < rule['predict_intervals_max']: new_item['predict_labels'] = rule['predict_labels'] break x3.append(new_item)
输出结果
[ {'id': '94ffe1d6-0afa-11ec-b139-4cd98f4d62e3', 'fact_group': '0.05', 'probability': 0.2, 'predict_labels': 0}, {'id': '86ae0229-0af8-11ec-be8c-4cd98f847094', 'fact_group': '0.05', 'probability': 0.56, 'predict_labels': 0}, {'id': '867ef7ac-0af8-11ec-be8c-4cd98f847094', 'fact_group': '0.2', 'probability': 0.31, 'predict_labels': 2}, {'id': '211bc00c-0af6-11ec-b139-4cd98f4d62e3', 'fact_group': '0.2', 'probability': 0.96, 'predict_labels': 3} ]
注:你给出的预期结果示例中存在重复
predict_labels字段属于输入笔误,上述结果为符合匹配规则的正确输出。
内容的提问来源于stack exchange,提问作者Mikhail
相关产品推荐
相关产品推荐

