python:根据时间字符串元素对字典列表进行排序

时间:2018-08-16 05:47:28

标签: python sorting

我有一个字典列表。除其他元素外,列表中的每个字典都有一个日期和时间元素,看起来像-2018-08-14T14:42:14。我编写了一个比较两个这样的字符串并返回最新字符串的函数。如何使用此方法对列表进行排序(最新的优先)?另外,每个字典的大小都很大,因此,如果可能的话,我想对数组的索引进行排序(根据时间元素),而不是对整个数组进行排序。我在该站点上还看到了其他类似的问题,但是所有这些问题都讲述了如何基于int或string等已知数据类型进行排序。

2 个答案:

答案 0 :(得分:3)

以ISO格式编写的日期具有一个不错的属性-如果您按字母顺序对它们进行排序,那么您也将根据日期值对它们进行排序(当然,如果属于一个时区)。只需使用list.sort()函数即可。这样就可以对列表进行排序。无论如何,您都不必担心内存,因为创建第二个排序的列表不会占用太多内存,因为它保留了对第一个列表中字典的引用。

a = [
    {'time': '2018-01-02T00:00:00Z'},
    {'time': '2018-01-01T00:00:00Z'},
]

a.sort(key=lambda x: x['time'])
print(a)

答案 1 :(得分:2)

我们通过将时间转换为python datetime对象来对时间进行排序,该对象具有与int一样的自然排序。因此,您不必担心时间字符串的格式。

# l is the list of the dicts, each dict contains a key "time". 
l = sorted(l, key=lambda x: datetime.datetime.strptime(x["time"], '%Y-%m-%dT%H:%M:%S'))