按日期排序字典列表

时间:2011-05-18 17:23:53

标签: python sorting date dictionary

我有以下列表:

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 个答案:

答案 0 :(得分:6)

使用内部字典的键作为排序键。您可以通过将密钥getter函数传递给sorted来执行此操作,该函数会从您的字典中提取日期密钥。

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

答案 1 :(得分:3)

print sorted(l) 

[{datetime.date(2009, 4, 12): 'Banana'}, {datetime.date(2011, 4, 30): 'Carrot'}, {datetime.date(2012, 1, 1): 'Corn'}]
在这种情况下,

实际上正在完成这项工作。

选择一个更合适的数据结构,如元组或带有明确键的日期和值的dict,这将是有利的,但如上所述:使用sorted()开箱即用。

答案 2 :(得分:1)

您应该使用元组列表,或将这些数据收集到类中。无论如何,要使用.keys()函数获取密钥的迭代器,并通过将其转换为可迭代并从中调用next()来获取其中的任何成员:

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

如果您使用的是Python 2.x,请将keys替换为iterkeys