Python如何筛选键为元组的字典中符合指定datetime范围的条目
问题原因
- 你定义的
start_t、stop_t为整数元组,和元组键里的datetime类型元素无法直接比较,是报错的核心原因 - 字典没有
append方法,新增键值对应使用字典[键] = 值的语法 - 筛选逻辑错误:你直接比较了整个元组键和时间元组,实际应该只取元组键的第一个
datetime元素做判断
实现方案
首先需要把起止时间转为datetime类型对象:
import datetime start_t = datetime.datetime(2021, 11, 17, 0, 0, 0) stop_t = datetime.datetime(2021, 11, 17, 23, 59, 59)
1. 简洁写法(字典推导式)
一行代码即可完成筛选+替换键的需求:
new_dict = { key[0]: value for key, value in old_dict.items() if start_t <= key[0] <= stop_t }
注意:如果原字典中存在多个元组键的
datetime部分完全相同,新字典会自动覆盖重复键,仅保留最后遍历到的对应值。
2. 保留重复时间对应所有值的写法
如果同一时间对应多条数据需要全部保留,可以用defaultdict把值存为列表:
from collections import defaultdict new_dict = defaultdict(list) for key, value in old_dict.items(): if start_t <= key[0] <= stop_t: new_dict[key[0]].append(value)
3. 按时间倒序遍历的写法
如果需要保持你原本先排序再遍历的逻辑,修改后代码如下:
new_dict = {} # 仅按元组键的datetime部分倒序排序 timesorted = sorted(old_dict.keys(), key=lambda x: x[0], reverse=True) for key in timesorted: current_dt = key[0] if start_t <= current_dt <= stop_t: new_dict[current_dt] = old_dict[key]
内容的提问来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

