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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:15:02