按日期将python数组字段排序为日期字符串

时间:2021-02-10 08:19:22

标签: python arrays

Python JSON 数组如示例所示

[{
   "id":"3",
   "creator_id":"2131xxxxxxxx",
   "lowest_price_at":"2021-01-21T09:29:38-08:00",
   "status":"published",
   "status_changed_at":"2021-02-09T23:59:34-08:00",
   "origin_domain":"us"
},
{
   "id":"5",
   "creator_id":"2131xxxxxxxx",
   "lowest_price_at":"2021-01-15T09:29:38-08:00",
   "status":"published",
   "status_changed_at":"2021-02-09T23:59:34-08:00",
   "origin_domain":"us"
},
{
   "id":"1",
   "creator_id":"2131xxxxxxxx",
   "lowest_price_at":"2021-01-5T09:29:38-08:00",
   "status":"published",
   "status_changed_at":"2021-02-09T23:59:34-08:00",
   "origin_domain":"us"
}]

它包含在 live_items 数组中。 现在我需要按 status_changed_at 降序对该数组进行排序。 意思是数组中的第一项必须是带有 "id":"1"

的项
from datetime import datetime
print(sorted(live_items, key=lambda x['status_changed_at']: datetime.strptime(x['status_changed_at'], "%Y-%m-%dT%H:%M:%S-08:00").strftime("%b %d %Y %I:%M%p")))
<块引用>

SyntaxError: 表达式不能包含赋值,也许你的意思是 “==”?

这是我在线程 sort dates in python array 上找到的,但自从我第一次使用 lambda ex 以来我就卡住了..

2 个答案:

答案 0 :(得分:1)

只需删除 lambda 表达式中的数组访问

key=lambda x['status_changed_at']: ...

然后做

key=lambda x: ...

数组访问稍后完成:

datetime.strptime(x['status_changed_at'] ...

对于降序排序,您还需要

..., reverse=True)

除此之外,您需要在 strftime 中修改您的表达式,因为您首先有月份并且它依赖于语言环境。 %Y%m%d%H%M 可能排序更好。

答案 1 :(得分:1)

您不需要为 lambda 提供密钥 status_changed_at。第一个参数代表元素本身。

应该是:

from datetime import datetime
res = sorted(live_items,  key=
             lambda x: 
                 datetime.strptime(x['status_changed_at'], "%Y-%m-%dT%H:%M:%S-08:00").strftime("%b %d %Y %I:%M%p"))
相关问题