在Python中,是否有一种很好的方法(以编程方式)从最近日期存在的数据子集中获取["win"]["amount"]
的值?
为了提供一个更具体的例子,我想问一下,2018年4月2日amount
win
2018-04-02
,199.51
,dict
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 }}
答案 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'