Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取JSON列表的最后一个元素_Python_Json_Filtering - Fatal编程技术网

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这确实更有效——我已经编辑了我的答案