排序嵌套的 Python 字典
我有一个Python字典,格式如下。
{'KEY': (NUMBER, [DATE1, DATE2]}
比如说,{'a': (10, ['2010/04/11','2009/03/11'])}
我该怎么根据日期1(列表中的第一个元素)来对这个字典进行排序呢?
编辑
如果日期相同,我能再排序一次吗?比如说。
{'a': (10, ['2010/04/11','2009/03/11'])}
{'b': (20, ['2010/04/11','2009/03/10'])}
{'c': (100, ['2009/01/01'])}
-->
{'b': (20, ['2010/04/11','2009/03/10'])} // this comes first as 20 > 10
{'a': (10, ['2010/04/11','2009/03/11'])}
{'c': (100, ['2009/01/01'])}
2 个回答
3
如果你在用Python 2.7或者更新的版本,可以使用新的collections.OrderedDict类。结合Ignacio的代码来进行实际的排序,这样就能得到你想要的结果。
假设a是你现在的字典,那么
OrderedDict(sorted(a.items(), key=lambda x: (x[1][1][0], -x[1][0])))
会返回一个排序后的版本。
4
字典是不能排序的。如果你想要一个排序好的二元组列表:
sorted(D.iteritems(), key=lambda x: x[1][1][0])
如果你想要按日期顺序而不是字符串顺序来处理,可以把这个表达式传给 datetime.strptime()
(不过由于现有的日期格式,其实两者之间差别不大...)。