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

如何根据键的数值范围(差值≤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']}

代码逻辑说明

  1. 排序处理:先将所有键转换为整数并排序,确保按数值顺序遍历,避免遗漏相邻符合条件的键
  2. 分组合并:从第一个键开始初始化合并组,逐个检查后续键与当前组起始键的差值,符合条件则合并值列表,不符合则保存当前组并开启新组
  3. 结果转换:将最终的合并组转换为字典,默认用组的起始键作为新键,也可根据需求修改为范围格式(如 "300-301")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:15:42