排序嵌套的 Python 字典

1 投票
2 回答
1877 浏览
提问于 2025-04-16 13:42

我有一个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()(不过由于现有的日期格式,其实两者之间差别不大...)。

撰写回答