查找最大日期小于或等于变量的字典,返回值

2024-04-20 04:40:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我安装了pythonpackagefred,使用pip install fred,从FRED/ALFRED API获取实时数据。在

我现在的任务是将一个评估日期与数据相匹配,以便提取与最大的realtime_date相关的值,该值小于或等于我所称的评估日期(aDate)。在

数据本身在python字典中返回,其中包含列表,每个观察值与一些元数据一起存储在字典中——每个观察dict包含:一个参考日期(date)、请求所覆盖的实时时间段(realtime_endrealtime_start)和值(value)。在

我可以看到,当数据完全匹配时,如何将数据与评估日期相匹配,但在现实世界中,这些都是例外。我正在寻求帮助,把这归纳为不平等。在

(请注意,我使用的是一个变量fredKey——而您必须提供自己的FRED API密钥才能访问FRED)。在

import fred
fred.key(fredKey)
CPIobvs = fred.observations('CPIAUCSL', realtime_start = "1990-01-01")
aDate == "2008-02-15"

for i in range(1, len(CPIobvs['observations']['observation'])):
    if CPIobvs['observations']['observation'][i]['realtime_start'] == aDate:
        print (CPIobvs['observations']['observation'][i]['date'], 
                CPIobvs['observations']['observation'][i]['value']
               )

在这个例子中,我选择了一个年度基准修订日期,以确保能得到一些回报。实际上,我通常会在没有发生任何事情的日期更新模拟——在这种情况下,我的方法不会返回任何结果。在

解决方案似乎是匹配小于或等于评估日期的最大日期(一个realtime_start值)(比如aDate == "2008-02-14")。我该如何匹配最大的realtime_date小于或等于aDate?在

谢谢


Tags: 数据apidate字典valuefredstartrealtime
1条回答
网友
1楼 · 发布于 2024-04-20 04:40:34

一种方法是通过过滤掉CPIobvs['observations']['observation']'realtime_start'>aDate中的所有项来识别候选项。在

我会以generator expression的身份来做这个:

candidates = (ob for ob in CPIobvs['observations']['observation'] if
    ob['realtime_start'] <= aDate)

如果要查看详细信息,可以在解释器中形成list comprehension

^{pr2}$

一旦识别出这些候选者,就使用内置的^{}函数,为key提供一个lambda,它使用'realtime_start'的值对候选的dict进行排序:

last_ob = max(candidates, key=lambda ob: ob['realtime_start'])

您需要的详细信息现在在last_ob['date']last_ob['value']中。在

相关问题 更多 >