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

从包含多个日期dict的Python dict中获取最新日期的数据子集,python,date,dictionary,nested,max,Python,Date,Dictionary,Nested,Max,在Python中,有没有一种好方法(通过编程)从存在最近日期的数据子集中获取[“win”][“amount”]的值 为了提供一个更具体的例子来说明我的要求,我希望从2018年4月2日起(2018-04-02)获得win的金额,即199.51 这是源JSON(我使用JSON.loads将其转换为Pythondict): 这似乎是一个非常简单的解决方案,但我不能完全确定该解决方案是什么,或者是否有一种Pythonic方法来实现这一点。我确实编写了一些逻辑来计算最大日期,方法是将所有日期放入一个名为d

在Python中,有没有一种好方法(通过编程)从存在最近日期的数据子集中获取
[“win”][“amount”]
的值

为了提供一个更具体的例子来说明我的要求,我希望从2018年4月2日起(
2018-04-02
)获得
win
金额,即
199.51

这是源JSON(我使用
JSON.loads将其转换为Python
dict
):


这似乎是一个非常简单的解决方案,但我不能完全确定该解决方案是什么,或者是否有一种Pythonic方法来实现这一点。我确实编写了一些逻辑来计算最大日期,方法是将所有日期放入一个名为
datelist
的列表中,然后执行
max(datelist)
,但我不确定如何将其关联到
[“amount”][“win”]

鉴于您的日期采用ISO 8601表示法,您可以进行简单的字符串比较,作为内部编号列表的排序机制,然后选择最后一个元素:

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

或者只需对内部列表进行一次排序,然后选择需要更频繁访问的元素。

如果
'date'
属性遵循ISO 8601,因此字典顺序与时间顺序相对应,则您可以简单地使用
max
和适当的
键,因此:

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

你能证明自己在解决这个问题上有什么努力吗?我将客观地回答这个问题:是的,当我将日期放入
日期列表
并使用
max()
计算最近的日期时,如前所述。但是,我不完全确定如何将计算结果与我想要得到的
金额联系起来。我在想最好的办法是用值而不是键来搜索
dict
。我尝试过类似的方法,但没有成功(我想因为日期“超出”了
win
lose
),来自@juanpa arrivillaga()的解决方案在这里对我有效。这很有效。非常感谢。看起来我需要复习一下匿名lambda函数。@stuntmachine如果我理解正确,你可以同样轻松地使用普通函数。这个匿名函数返回共享数据的子集,其中包含最大日期,然后只需从结果中选择
['win']['amount']
。很不错的。
In [12]: max(data['numbers'], key=lambda d:d['date'])['win']['amount']
Out[12]: '199.51'