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

如何在OrderedDict中查找指定小时之前值为目标值的最后一个小时并实现对应函数

实现get_previous_hour函数的方案

嘿,刚上手OrderedDict是吧?别慌,这个需求其实挺清晰的,咱们来一步步搞定它~

思路解析

OrderedDict的核心特性就是按插入顺序保存键值对,这刚好完美匹配我们的需求——要找指定小时之前最后一个匹配目标值的小时,只需要按顺序遍历它的键值对,同时记录符合条件的最新小时就行:

  • 先初始化一个变量last_matching_hour为0(这是找不到匹配项时的默认返回值)
  • 按插入顺序遍历OrderedDict的每一组键值对,只处理小于指定hour的键
  • 每次遇到值等于目标value的项,就把last_matching_hour更新为当前的小时键
  • 遍历结束后直接返回记录的结果

代码实现

首先别忘了导入OrderedDict,然后写函数:

from collections import OrderedDict

def get_previous_hour(od: OrderedDict, value: str, hour: int) -> int:
    last_matching_hour = 0
    # 按插入顺序遍历OrderedDict的键值对
    for current_hour, current_value in od.items():
        # 跳过指定小时及之后的项,只处理之前的
        if current_hour >= hour:
            continue
        # 找到匹配值,更新最后匹配的小时
        if current_value == value:
            last_matching_hour = current_hour
    return last_matching_hour

验证示例

我们用你给出的测试用例来验证一下:

# 初始化测试用的OrderedDict
test_od = OrderedDict({1:"ala", 2:"a", 3:"a", 4: "dog",5:"a" })

# 测试用例1:找hour=3之前最后一个值为"a"的小时
print(get_previous_hour(test_od, "a", 3))  # 输出:2 ✔️
# 测试用例2:找hour=5之前最后一个值为"a"的小时
print(get_previous_hour(test_od, "a", 5))  # 输出:3 ✔️
# 测试用例3:找hour=5之前最后一个值为"dog"的小时
print(get_previous_hour(test_od, "dog", 5)) # 输出:4 ✔️

额外小提示

  • 如果你用的是Python 3.7及以上版本,普通的dict也会保持插入顺序,但如果你的代码需要兼容旧版本,或者用到OrderedDict的特殊方法(比如move_to_end),还是得用OrderedDict哦。
  • 如果指定的hour比所有键都小(比如hour=1),函数会直接返回0,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:22:44