在python中按日期时间对字典列表进行排序
Posted
技术标签:
【中文标题】在python中按日期时间对字典列表进行排序【英文标题】:Sort list of lists of dictionaries by datetime in python 【发布时间】:2022-01-24 02:17:36 【问题描述】:我想按图书的出版日期对 Google Books API 返回的图书列表进行排序。数据看起来像这样:
"kind": "books#volumes",
"totalItems": 506,
"items": [
...
"volumeInfo":
"title": "RHYTHM OF WAR PART ONE",
"authors": [
"BRANDON SANDERSON"
],
"publishedDate": "2023-03-16",
"industryIdentifiers": [
"type": "ISBN_10",
"identifier": "1473233372"
,
...
,
我尝试过的是首先将书籍隔离在一个新列表中,如下所示:
myList = myList["items"]
然后按日期时间对新列表进行排序。
myListSorted = sorted(myList, key=lambda d: datetime.datetime.strptime(d["volumeInfo"]["publishedDate"], '%Y-%m-%d'))
我收到以下错误消息:
myListSorted = sorted(myList, key=lambda d: datetime.datetime.strptime(d["publishedDate"]["volumeInfo"], '%Y-%m-%d'))
TypeError: list indices must be integers or slices, not str
我也尝试过使用itemgetter方法,但目前还没有成功。
API 调用的结果可以按发布日期排序,如下所示:
https://www.googleapis.com/books/v1/volumes?q=inauthor:brandon%20sanderson&orderBy=newest
但是我将几个调用的结果一起添加到一个列表中,并且希望能够按发行日期对所有书籍进行排序。
【问题讨论】:
错误消息表明您正在索引的内容是列表而不是字典 - 即d
或(如果错误实际上来自前一行)myList
不是您认为是或不是来自完全如图所示的数据。我的猜测是您分配myList
的方式有问题,此代码sn-p 并非完全错误,但它很可疑:myList = myList["items"]
。为了清楚起见,我通常会给仅项目列表一个新名称,例如volumes = myList["items"]
。
【参考方案1】:
我发现了你的问题!
在您的第二个 myListSorted
语句中,您的字典参数出现错误!
试试这个:
myListSorted = sorted(myList, key=lambda d: datetime.datetime.strptime(d["volumeInfo"]["publishedDate"], '%Y-%m-%d'))
【讨论】:
谢谢。当它不起作用时,我试图切换参数,并且不小心复制了错误消息以便更早地执行代码。从那以后,我发现我的代码的不同点出了问题。 @MD,没问题!很高兴你知道了!【参考方案2】:问题必须在您的代码中的其他地方,因为这与您所说的一样,但没有问题:
from json import load
from urllib.request import urlopen
from datetime import datetime
with urlopen('https://www.googleapis.com/books/v1/volumes?q=inauthor:brandon%20sanderson&orderBy=newest') as r:
data = load(r)
items = data['items']
sorted_items = sorted(items, key=lambda d: datetime.strptime(d["volumeInfo"]["publishedDate"], '%Y-%m-%d'))
print(sorted_items)
如果您仍有问题,请提供一个最小的、可重现的示例。
【讨论】:
感谢您指出这一点。我一直错误地将 API 调用的结果加在一起。现在我收到 ValueError: time data '2021' does not match format '%Y-%m-%d' 所以我将研究处理不具有我指定格式的值。以上是关于在python中按日期时间对字典列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章