gpt4 book ai didi

python - 在 Python 字典中选择一个日期范围

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:15 26 4
gpt4 key购买 nike

我有以下字典:

history = {
"2008-11-17": 41,
"2010-05-28": 82,
"2008-11-14": 47,
"2008-11-13": 60,
"2008-11-12": 56,
"2008-11-11": 55,
"2008-11-10": 98,
"2008-11-19": 94,
"2008-11-18": 94,
"2004-05-27": 82,
"2004-05-26": 45,
"2004-05-25": 70,
# there's more ...
}

如何定义生成器函数 get_records(dict_history, str_from_date, str_to_date) 以生成 date: record 条目?

我知道如何将 datetime 对象转换为我想要的任何字符串格式。然而,我在这个障碍中的主要痛点是:

  1. dict 未排序。
  2. dict 键是字符串。
  3. 日期不连续。

到目前为止,这是我能想到的:

from datetime import datetime, timedelta

def get_records(history, start_date, end_date):
fmt = "%Y-%m-%d"
dt = timedelta(days=1)

present_date = datetime.strptime(start_date, fmt)
end_date = datetime.strptime(end_date, fmt)

while present_date <= end_date:
present_string = present_date.strftime(fmt)
try:
yield (present_string, history[present_string])
except KeyError:
pass
present_date += dt

有没有更有效的方法来做到这一点?

更新(2011 年 8 月 2 日)
我找到了一个 SortedCollection ActiveState 的类(class),同样由 Raymond Hettinger 授课。

最佳答案

我只是遍历字典并返回匹配的项目:

def get_records(history, start_date, end_date):
for date, entry in history.iteritems():
if start_date <= date <= end_date:
yield date, entry

请注意,您的特定日期格式允许与 < 进行直接字符串比较和 >无需转换为 datetime先举例。

另请注意,给定函数将以无特定顺序返回匹配项。

关于python - 在 Python 字典中选择一个日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com