按日期排序字典列表

2 投票
3 回答
1759 浏览
提问于 2025-04-16 17:54

我有以下这个列表:

l = [{datetime.date(2011, 4, 30): "Carrot"}, 
     {datetime.date(2009, 4, 12): "Banana"},
     {datetime.date(2012, 1, 1): "Corn"}]

我想要一个新的列表,里面的字典按照日期排序(最早的在前面):

l = [{datetime.date(2009, 4, 12): "Banana"},
     {datetime.date(2011, 4, 30): "Carrot"},
     {datetime.date(2012, 1, 1): "Corn"}]

我觉得答案应该用到 sortedkey,但是我在找每个字典的关键字时遇到困难,想用它来进行比较。在其他类似的问题中,字典的格式是:

{'date':datetime.date(2009, 4, 12): "Banana"} 

如果加上 date 字符串,似乎会让这个任务变得简单一些,但我希望如果可以的话,还是尽量避免这样做。

谢谢。

3 个回答

2

你可以使用一个包含元组的列表,或者把这些数据放到一个类里面。无论如何,你可以用 .keys() 函数来获取键的迭代器,然后把它转换成可迭代的对象,再用 next() 来获取其中的一个元素:

l.sort(key=lambda p:next(iter(p.keys())))

如果你在用 Python 2.x,记得把 keys 替换成 iterkeys

3
print sorted(l) 

[{datetime.date(2009, 4, 12): 'Banana'}, {datetime.date(2011, 4, 30): 'Carrot'}, {datetime.date(2012, 1, 1): 'Corn'}]

在这个情况下,它实际上是能完成工作的。

如果选择一个更合适的数据结构,比如元组(tuple)或者带有明确键值的字典(dict),这样会更有利。不过正如所说的,使用 sorted() 直接就能工作。

7

使用你内层字典的键作为排序的依据。你可以通过给 sorted 函数传递一个获取键的函数来实现,这个函数会从你的字典中提取出日期键。

sorted(l, key=lambda v: v.keys()[0])

撰写回答