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

Python按条件比较字典键 对键差为1的相邻键值求和

问题说明

现有已完成键排序的Python字典,用于查找键差值匹配规则时对应值的和:

k={0: 2, 1: 1, 3: 2, 4: 1, 5: 1, 6: 1}

处理规则:

  • 两两比较字典键,若两个键的差值等于1,将两个键对应的字典值相加
  • 字典键取值范围仅为0-100
  • 此前尝试使用next和迭代器方法实现,未得到预期结果
  • 预期输出为数组格式[3,3,2,2]

计算逻辑示例:键0和键1差值为1,二者对应值求和2+1=3;键1和键3差值为2不满足规则跳过;键3和键4差值为1,求和2+1=3;键4和键5差值为1,求和1+1=2;键5和键6差值为1,求和1+1=2,最终得到目标结果。

实现代码

Python 3.7及以上版本字典默认保留插入顺序,你已经提前完成键的排序,不需要额外做排序操作,直接遍历相邻键对判断即可:

基础易读写法

k = {0: 2, 1: 1, 3: 2, 4: 1, 5: 1, 6: 1}
key_list = list(k.keys())
result = []
for idx in range(len(key_list) - 1):
    current_key = key_list[idx]
    adjacent_key = key_list[idx + 1]
    if adjacent_key - current_key == 1:
        result.append(k[current_key] + k[adjacent_key])

print(result)
# 输出结果:[3, 3, 2, 2]

迭代器+next写法(对应之前尝试的实现思路)

k = {0: 2, 1: 1, 3: 2, 4: 1, 5: 1, 6: 1}
key_iter = iter(k.keys())
prev_key = next(key_iter)
result = []
for curr_key in key_iter:
    if curr_key - prev_key == 1:
        result.append(k[prev_key] + k[curr_key])
    prev_key = curr_key

print(result)
# 输出结果:[3, 3, 2, 2]
逻辑说明
  • 两种写法都是按顺序遍历相邻的两个键,只判断相邻键差值是否为1,不需要做全量键的两两比对,因为键已经是排好序的,全量比对会做无用功
  • 由于键的最大取值仅为100,两种写法的性能都完全满足需求,优先选第一种易读易维护的写法即可
  • 之前用next和迭代器没出正确结果,大概率是迭代器遍历的时候指针移动逻辑写错,比如重复调用next导致跳过了待比较的键

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:24:25