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

问题描述:

我安装了python packagefred,使用pip install fred,从FRED/ALFRED API获取实时数据。查找字典的最大日期小于或等于变量,返回值

我现在的任务是将评估日期匹配到的数据 - 因此,提取具有最大realtime_date这是小于或等于什么我打电话的评估基准日(aDate)关联的值。

数据本身在包含列表的Python字典中返回,每个观察值都与一些元数据一起存储在字典中 - 每个观察字典包含:参考日期(date),实时期请求覆盖(realtime_end,realtime_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'] 
       ) 

在这个例子中,我选择了一个年度基准修订日期,以确保获得回报。在实践中,我通常会在发生注意事件的日期更新模拟 - 在这种情况下,我的方法不会返回任何内容。

该解决方案似乎与小于或等于评估日期(例如aDate == "2008-02-14")的最大日期(realtime_start值)相匹配。我怎么可能匹配最大的realtime_date小于或等于aDate

感谢

+2

可能我建议你做的任何事情都有''obs = CPIobvs ['observations'] ['observation']''for for循环外部;以节省可能的拼写错误和可读性。 – sotapme 2013-02-24 11:31:41

+0

+1谢谢。一个有用的提示。 – ricardo 2013-03-02 05:17:26

的一种方法是通过在CPIobvs['observations']['observation']其中'realtime_start'>aDate过滤掉所有的项目,以确定候选人。

我会做这个作为generator expression

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

如果你想看到的细节,你可以形成你解释一个list comprehension

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

一旦这些候选人确定后,随后,使用内置的max()函数,为key提供一个lambda,其使用'realtime_start'的值对候选人进行排序dict s:

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

您需要的细节现在在last_ob['date']last_ob['value']

+0

+1,谢谢。我不完全明白发生了什么事:我检查了候选对象的类型,它是一个“生成器” - 不完全确定它是什么。我要问的原因是列表obsList = CPIobvs ['observations'] ['observation']'中的每个元素都是以下形式的'dict':'{'date':'2013-01-01', 'realtime_end':'9999-12-31','realtime_start':'2013-02-21','value':'231.198'}'。我的目标是打印'obsList ['date'],obsList ['value']'对,并且受到与该日期关联的最大'obsList ['realtime_start']'日期的约束。 – ricardo 2013-03-02 05:27:38

+0

我意识到我的评论真的是另一个[问题](http://*.com/questions/15180767/subset-list-based-on-value-of-dictionary-element),所以我接受并张贴了另一个。谢谢 – ricardo 2013-03-02 23:47:58

+0

@ricardo:我希望我的最新答案能够澄清细节。 – Johnsyweb 2013-03-03 07:47:31