从包含多个日期dict的Python dict中获取最新日期的数据子集
在Python中,有没有一种好方法(通过编程)从存在最近日期的数据子集中获取从包含多个日期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
[“win”][“amount”]
的值
为了提供一个更具体的例子来说明我的要求,我希望从2018年4月2日起(2018-04-02
)获得win
的金额,即199.51
这是源JSON(我使用JSON.loads将其转换为Pythondict
):
这似乎是一个非常简单的解决方案,但我不能完全确定该解决方案是什么,或者是否有一种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'