繁体   English   中英

如何获取JSON列表的最后一个元素

[英]How to get last element of a JSON list

我陷入一个简单的问题:

我通过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:

[app for app in parsedjson['completedapps'] if app['name'] == "IE_Traitement_OA"]

但是我现在陷入困境,我不知道如何获得最新的“应用程序”? 我认为我必须使用starttimesubmitdate字段,但是我不知道如何处理。 你可以帮帮我吗?

您可以使用以下内容进行过滤:

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

a将包含与您的过滤器匹配的所有字典的列表,然后您可以对列表中的最新字典进行排序-使用任何键对其进行排序

sorted_a = sorted(a, key=lambda k: k['starttime'])

如果只想要一个,则假定sorted_a的第一个元素不为空,则选择它。

编辑:使用min代替排序的感谢@VPfB

min_a = min(a, key=lambda k: k['starttime'])

如果您将使用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 ,则需要先进行转换

在此链接上有一些转换示例: 将字符串转换为日期时间

好看!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM