我如何按日期时间排序这个词典?

时间:2011-09-26 18:42:46

标签: python datetime dictionary

我如何按照日期时间对此词典进行排序? 有可能吗?

{
1: {'l':{'created_on': datetime.datetime(2011, 9, 29, 17, 39, 26)}},
2: {'l':{'created_on': datetime.datetime(2011, 9, 23, 17, 39, 26)}},
3: {'l':{'created_on': datetime.datetime(2011, 9, 30, 17, 39, 26)}}
}

3 个答案:

答案 0 :(得分:4)

您可以在值上调用sorted()函数,并将datetime作为比较键:

sorted(d.values(), key=lambda item: item["l"]["created_on"])

答案 1 :(得分:3)

您可以获取字典d的键的排序列表(字典不能自行排序):

>>> sorted(d.keys(), key=lambda k: d[k]['l']['created_on'])
[2, 1, 3]

PS:如果你真的需要一个带有排序键的字典,那么现在标准的OrderedDict类型就是你的朋友(正如在Frédéric的答案之后由rocksportrocker和agf发表的评论中所述)。

答案 2 :(得分:1)

你不能对dict()本身进行排序。该词典没有任何隐含的顺序:

>>> print dict(a=3, b=2, c=1)
{'a': 3, 'c': 1, 'b': 2}

如果您想保留字典的完整结构,则必须先将字典dd压缩到列表li中。然后,您可以使用datetime值作为关键字进行排序:

import operator 

dd = { 1: ..... }

li = [] 

for (i, it) in dd.items():
    for (l, it1) in it.items():
        for (c, dt) in it.items():
            li.append((i, l, c, dt))
li.sort(key=operator.itemgetter(3))

print li