如何根据键的数值范围(差值≤10)合并Python字典中的值
字典按键数值范围合并值列表的实现
需求说明
根据字典键的数值范围合并对应的值列表,核心规则:当两个键转换为数值后的差值小于等于10时,合并它们的值列表。
示例字典
d1 = {"300":["index1","index2"],"301":["index9","index10"],"400":["index12","index13"]}
规则示例
- 键"300"与"301"数值差值为1(≤10),合并后值列表为
["index1","index2","index9","index10"] - 键"301"与"400"数值差值为99(>10),不合并
- 若存在键"410",与"400"数值差值为10(≤10),需合并两者的值列表
解决方案代码
def merge_dict_by_key_range(input_dict): # 将字典键转为整数并排序 sorted_keys = sorted(int(k) for k in input_dict.keys()) merged_groups = [] if not sorted_keys: return {} # 初始化第一个合并组 current_start_key = sorted_keys[0] current_values = input_dict[str(current_start_key)].copy() for key in sorted_keys[1:]: if key - current_start_key <= 10: # 差值符合要求,合并值列表 current_values.extend(input_dict[str(key)]) else: # 差值超出范围,保存当前组并开启新组 merged_groups.append((current_start_key, current_values)) current_start_key = key current_values = input_dict[str(key)].copy() # 保存最后一个组 merged_groups.append((current_start_key, current_values)) # 转换为结果字典,可按需修改键的格式(比如用"起始-结束"的范围字符串) return {str(k): v for k, v in merged_groups} # 测试示例1 d1 = {"300":["index1","index2"],"301":["index9","index10"],"400":["index12","index13"]} print(merge_dict_by_key_range(d1)) # 输出: {'300': ['index1', 'index2', 'index9', 'index10'], '400': ['index12', 'index13']} # 测试示例2(含键"410"的情况) d2 = {"400":["index12","index13"], "410":["index14","index15"]} print(merge_dict_by_key_range(d2)) # 输出: {'400': ['index12', 'index13', 'index14', 'index15']}
代码逻辑说明
- 排序处理:先将所有键转换为整数并排序,确保按数值顺序遍历,避免遗漏相邻符合条件的键
- 分组合并:从第一个键开始初始化合并组,逐个检查后续键与当前组起始键的差值,符合条件则合并值列表,不符合则保存当前组并开启新组
- 结果转换:将最终的合并组转换为字典,默认用组的起始键作为新键,也可根据需求修改为范围格式(如
"300-301")
内容的提问来源于stack exchange,提问作者Zen35X
相关产品推荐
相关产品推荐

