从Python dict中获取最新的日期数据子集,其中包含多个日期的dicts

时间:2018-04-09 00:26:48

标签: python date dictionary nested max

在Python中,是否有一种很好的方法(以编程方式)从最近日期存在的数据子集中获取["win"]["amount"]的值?

为了提供一个更具体的例子,我想问一下,2018年4月2日amount win 2018-04-02199.51dict 1}}。

这是源JSON(我使用json.loads将其转换为Python { "numbers": [{ "lose": { "amount": "122.50" }, "win": { "amount": "232.50" }, "date": "2018-01-08" }, { "lose": { "amount": "233.75" }, "win": { "amount": "216.25" }, "date": "2018-03-05" }, { "lose": { "amount": "123.50" }, "win": { "amount": "543.00" }, "date": "2018-03-12" }, { "lose": { "amount": "213.31" }, "win": { "amount": "253.33" }, "date": "2018-03-19" }, { "lose": { "amount": "217.00" }, "win": { "amount": "199.51" }, "date": "2018-04-02" }] } ):

datelist

这似乎是一个非常简单的解决方案,但我无法确定解决方案是什么,或者是否有Pythonic方法来实现这一点。我写了一些逻辑,通过将所有日期放入名为max(datelist)的列表并执行["amount"]["win"]来计算最大日期,但我不确定如何将其关联到get {{1 }}

2 个答案:

答案 0 :(得分:0)

鉴于您的日期是ISO 8601表示法,您可以将简单的字符串比较作为内部numbers列表的排序机制,然后选取最后一个元素:

import operator

oldest = sorted(your_data["numbers"], key=operator.itemgetter("date"))[0]["win"]["amount"]
# 232.50
newest = sorted(your_data["numbers"], key=operator.itemgetter("date"))[-1]["win"]["amount"]
# 199.51

或者只是对内部列表进行一次排序,然后在需要更频繁地访问它们时选择您想要的任何元素。

答案 1 :(得分:0)

如果'date'属性符合ISO 8601,那么词典顺序对应于时间顺序,那么您只需将max与适当的key一起使用,即可:

In [12]: max(data['numbers'], key=lambda d:d['date'])['win']['amount']
Out[12]: '199.51'