【发布时间】: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"]。