在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中按日期时间对字典列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中按名称和日期作为键对字典进行排序? [复制]

如何在飞镖/颤振中按日期对列表进行排序/排序?

在 Python 中按日期对 CSV 进行排序

python对列表中的字典进行排序

如何在 Pandas 数据框中按行值对日期时间列进行排序?

如何在uitableview的cellForRowAt函数中按标题日期对响应进行排序