Python 如何获取JSON列表的最后一个元素
我被一个简单的问题困住了: 我通过Python 如何获取JSON列表的最后一个元素,python,json,filtering,Python,Json,Filtering,我被一个简单的问题困住了: 我通过urllib一个JSON应用程序列表,如下所示: "completedapps" : [ { "starttime" : 1520863179923, "id" : "app-20180312145939-0183", "name" : "IE_Traitement_3", "cores" : 1, "user" : "root", "memoryperslave" : 1024, "submitd
urllib
一个JSON应用程序列表,如下所示:
"completedapps" : [ {
"starttime" : 1520863179923,
"id" : "app-20180312145939-0183",
"name" : "IE_Traitement_3",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 14:59:39 CET 2018",
"state" : "FINISHED",
"duration" : 212967
}, {
"starttime" : 1520863398147,
"id" : "app-20180312150318-0186",
"name" : "IE_Traitement_3",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:18 CET 2018",
"state" : "FINISHED",
"duration" : 6321
}, {
"starttime" : 1520863387941,
"id" : "app-20180312150307-0185",
"name" : "IE_Traitement_0A",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:07 CET 2018",
"state" : "FINISHED",
"duration" : 149536
}, { ... }]
[app for app in parsedjson['completedapps'] if app['name'] == "IE_Traitement_OA"]
我想获取名为“IE_Traitement_OA”的应用程序的最新元素,因此我首先过滤我的JSON,如下所示:
"completedapps" : [ {
"starttime" : 1520863179923,
"id" : "app-20180312145939-0183",
"name" : "IE_Traitement_3",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 14:59:39 CET 2018",
"state" : "FINISHED",
"duration" : 212967
}, {
"starttime" : 1520863398147,
"id" : "app-20180312150318-0186",
"name" : "IE_Traitement_3",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:18 CET 2018",
"state" : "FINISHED",
"duration" : 6321
}, {
"starttime" : 1520863387941,
"id" : "app-20180312150307-0185",
"name" : "IE_Traitement_0A",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:07 CET 2018",
"state" : "FINISHED",
"duration" : 149536
}, { ... }]
[app for app in parsedjson['completedapps'] if app['name'] == "IE_Traitement_OA"]
但我现在陷入困境,我不知道如何才能获得最新的“应用程序”?我想我必须使用
starttime
或submitdate
字段,但我不知道如何处理这个问题。您能帮助我吗?如果您要使用starttime
,您可以像这样使用max
功能:
data = [{
"starttime" : 1520863398147,
"id" : "app-20180312150318-0186",
"name" : "IE_Traitement_3",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:18 CET 2018",
"state" : "FINISHED",
"duration" : 6321
}, {
"starttime" : 1520863387941,
"id" : "app-20180312150307-0185",
"name" : "IE_Traitement_0A",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:07 CET 2018",
"state" : "FINISHED",
"duration" : 149536
}]
most_recent = max(data,key=lambda e: e['starttime'])
print(most_recent)
数据=[{
“开始时间”:1520863398147,
“id”:“app-2018031250318-0186”,
“名称”:“IE_Traitement_3”,
"核心":一,,
“用户”:“根用户”,
“memoryperslave”:1024,
“提交日期”:“2018年欧洲中部时间3月12日星期一15:03:18”,
“状态”:“已完成”,
“持续时间”:6321
}, {
“开始时间”:1520863387941,
“id”:“app-2018031250307-0185”,
“名称”:“IE_Traitement_0A”,
"核心":一,,
“用户”:“根用户”,
“memoryperslave”:1024,
“提交日期”:“2018年欧洲中部时间3月12日星期一15:03:07”,
“状态”:“已完成”,
“持续时间”:149536
}]
最新=最大值(数据,键=λe:e['starttime'])
打印(最近)
现在,如果要使用submitdate
,需要先进行转换
在此链接中有一些转换示例:
好看 如果您要使用
starttime
,您可以像这样使用max
功能:
data = [{
"starttime" : 1520863398147,
"id" : "app-20180312150318-0186",
"name" : "IE_Traitement_3",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:18 CET 2018",
"state" : "FINISHED",
"duration" : 6321
}, {
"starttime" : 1520863387941,
"id" : "app-20180312150307-0185",
"name" : "IE_Traitement_0A",
"cores" : 1,
"user" : "root",
"memoryperslave" : 1024,
"submitdate" : "Mon Mar 12 15:03:07 CET 2018",
"state" : "FINISHED",
"duration" : 149536
}]
most_recent = max(data,key=lambda e: e['starttime'])
print(most_recent)
数据=[{
“开始时间”:1520863398147,
“id”:“app-2018031250318-0186”,
“名称”:“IE_Traitement_3”,
"核心":一,,
“用户”:“根用户”,
“memoryperslave”:1024,
“提交日期”:“2018年欧洲中部时间3月12日星期一15:03:18”,
“状态”:“已完成”,
“持续时间”:6321
}, {
“开始时间”:1520863387941,
“id”:“app-2018031250307-0185”,
“名称”:“IE_Traitement_0A”,
"核心":一,,
“用户”:“根用户”,
“memoryperslave”:1024,
“提交日期”:“2018年欧洲中部时间3月12日星期一15:03:07”,
“状态”:“已完成”,
“持续时间”:149536
}]
最新=最大值(数据,键=λe:e['starttime'])
打印(最近)
现在,如果要使用submitdate
,需要先进行转换
在此链接中有一些转换示例:
好看 您可以使用以下选项进行筛选:
a = list(filter(lambda x: x['name'] == 'IE_Traitement_0A', data['completedapps']))
a
将包含与您的过滤器匹配的所有dict的列表,然后您可以对列表进行排序,以获得最新的dict——使用任意键进行排序
sorted_a = sorted(a, key=lambda k: k['starttime'])
如果只需要一个元素,则选择排序的元素的第一个元素,假设它不是空的
编辑:使用min而不是sorted-thankforthetip@VPfB
min_a = min(a, key=lambda k: k['starttime'])
您可以使用以下选项进行筛选:
a = list(filter(lambda x: x['name'] == 'IE_Traitement_0A', data['completedapps']))
a
将包含与您的过滤器匹配的所有dict的列表,然后您可以对列表进行排序,以获得最新的dict——使用任意键进行排序
sorted_a = sorted(a, key=lambda k: k['starttime'])
如果只需要一个元素,则选择排序的元素的第一个元素,假设它不是空的
编辑:使用min而不是sorted-thankforthetip@VPfB
min_a = min(a, key=lambda k: k['starttime'])
说明:首先获取dict列表,然后按时间戳排序
说明:首先获取dict列表,然后按时间戳排序。JSON数据,直到转换为字典结构。字典本质上不是一个有序的结构。如果要保留顺序,您需要使用OrderedDict转换这些数据。好的,我已经更新了json.load方法,添加了参数“object\u pairs\u hook=OrderedDict”,但是接下来?json数据将转换为字典结构。字典本质上不是一个有序的结构。如果要保留顺序,需要使用OrderedDict转换这些。好的,我已经更新了我的json.load方法以添加参数“object\u pairs\u hook=OrderedDict”,但是接下来?如果只需要一个元素,使用min
而不是对整个序列进行排序,然后扔掉除第一项以外的所有内容。谢谢@VPfB这确实更有效——我已经编辑了我的答案如果你只需要一个元素,使用min
而不是对整个序列进行排序,然后扔掉除第一项以外的所有内容。谢谢@VPfB这确实更有效——我已经编辑了我的答案