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 以来我就卡住了..
答案 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"))