我有以下列表:
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"}]
我希望答案涉及sorted
和key
,但我很难将每个字典的关键字用作比较器。在其他提出类似问题的问题中,词典采用以下形式:
{'date':datetime.date(2009, 4, 12): "Banana"}
date
字符串的添加似乎使任务更容易,但我想尽可能避免它
欢呼声。
答案 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
。