如何获取JSON-lis的最后一个元素

2024-10-03 02:41:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我被一个简单的问题困住了:

我查看了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
  }, { ... }]

我想获取名为“IE_Traitement_OA”的应用程序的最新元素,因此我从过滤JSON开始,如下所示:

^{pr2}$

但我现在卡住了,我不知道如何才能得到最新的“应用程序”?我想我必须使用starttimesubmitdate字段,但我不知道如何处理。你能帮帮我吗?在


Tags: nameidapp应用程序rootcoresmarie
3条回答

如果您要使用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)

现在,如果您想使用submitdate,您需要先进行转换

在这个链接中有一些转换的例子:Converting string into datetime

好样的!在

您可以使用以下方法进行筛选:

a = list(filter(lambda x: x['name'] == 'IE_Traitement_0A', data['completedapps']))

a将包含与您的筛选器匹配的所有dict的列表,然后您可以使用任何键对最新的dict进行排序

^{pr2}$

如果只需要一个元素,那么选择sorted_a的第一个元素,假设它不是空的。在

编辑:用min代替sorted谢谢你的提示@VPfB

min_a = min(a, key=lambda k: k['starttime'])
req_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
  } ]}"""

import json
data = json.loads(req_json)

print(sorted(data['completedapps'], key=lambda x: x['starttime'])[0]['id'])

out:

app-20180312145939-0183

说明:首先获取dict列表,然后按时间戳排序。在

相关问题 更多 >