假设我有json数据,其中每条记录中的唯一值是datetime。我如何获得最新版本?
示例Json:
pathVariable
有什么方法可以比较这个日期时间和python中的系统日期时间,找出哪个是最近的记录并仅返回该记录?我不想根据这里的id返回。如果两个日期时间完全相同,我想返回这两个最近的记录。到目前为止,我能够按升序时间顺序对JSON数据进行排序。但我相信这种方法是不正确的,因为JSON总是无序的。有没有其他办法呢?或者我可以返回排序数据中的最后一条记录吗?
如果日期时间格式在{
"jobs":
[
{
id: 1,
startTime: Wed 15 Jul 2015 15:39:33 GMT,
somekey: someval,
somekey: someval
},
{
id:1,
startTime: Sat 25 Jul 2015 02:37:50 GMT,
somekey: someval,
somekey: someval
}
]
}
中,则可以使用%y-%m-%d
对其进行排序。但是,如果时间格式是给定的,我无法弄清楚如何获取最新的一个。
答案 0 :(得分:1)
使用key
属性对日期进行排序是一个好主意。
我做了同样的事情,但使用max()
以获取最新数据,然后返回具有相同日期的所有数据。
from datetime import datetime
def most_recent(data):
dates = data["jobs"]
recent = max(dates, key=lambda x: datetime.strptime(x["startTime"], '%a %d %b %Y %X GMT'))["startTime"]
return [d for d in dates if d["startTime"] == recent]
您误解的是,您确实无法对词典进行排序,但您可以对包含类词典对象的列表进行排序。
如果仔细观察,您的JSON数据就是字典列表,因此可以轻松地将其排序为任何其他列表对象。
答案 1 :(得分:0)
首先,对于'Sat 25 Jul 2015 02:37:50 GMT'
格式的日期,您可以使用以下格式字符串来使用strptime()
解析日期时间 -
%a %d %b %Y %H:%M:%S %Z
演示 -
>>> datetime.datetime.strptime('Wed 15 Jul 2015 15:39:33 GMT','%a %d %b %Y %H:%M:%S %Z')
datetime.datetime(2015, 7, 15, 15, 39, 33)
其次,似乎json字典的jobs
键的元素有一个列表,列表有一个顺序,你可以对该列表进行排序(也许使用sorted()
函数,也就是说更容易按相反的顺序排序,因此它不会排序)然后你可以使用 -
datetime.datetime.now()
要获取当前时间,然后遍历列表,您可以检查小于now()
的第一个日期(因为列表按降序排序),然后继续迭代并取数据,直到您找到低于它的日期。这是假设您将来也可以有日期。
示例 -
import datetime
def get_most_recent(data):
lst = data[jobs]
newlst = sorted(lst,key=lambda x:datetime.datetime.strptime(x['startTime'],'%a %d %b %Y %H:%M:%S %Z'),reverse=True)
recentdate = None
nowd = datetime.datetime.now()
retlist = []
for i in newlst:
d = datetime.datetime.strptime(i['startTime'],'%a %d %b %Y %H:%M:%S %Z')
if recentdate is not None:
if d == recentdate:
retlist.append(i)
else:
break;
elif d < nowd:
recentdate = d
retlist.append(i)
return retlist