如何在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
相关产品推荐
相关产品推荐

