Python 我如何按日期时间对这条记录进行排序?
我如何按日期时间对这条记录进行排序? 可能吗Python 我如何按日期时间对这条记录进行排序?,python,datetime,dictionary,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)}} } 可以使用datetime作为比较
{
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)}}
}
可以使用datetime作为比较键对值调用函数:
sorted(d.values(), key=lambda item: item["l"]["created_on"])
不能对dict()本身进行排序。dict没有隐含顺序:
>>> print dict(a=3, b=2, c=1)
{'a': 3, 'c': 1, 'b': 2}
如果你想保留完整的dict结构,你必须首先将dictdd
平铺成一个列表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
您可以获得字典
d
的键的排序列表(字典本身无法排序):
PS:如果你真的需要一本带有排序键的词典,现在的标准类型是你的朋友(如Frédéric回答后rocksportrocker和agf的评论所述)。如果你想保留所有信息:排序(d.items(),key=lambda k,it:it[“l”[“created_on”])如果您想将@rocksportrocker方法作为映射返回,您可以将其包装在一个
OrderedDict()
中。我不知道这个版本如何保持完整的结构,或者如何排序(d.items()…
失败?特别是因为它可以包装在一个OrderedDict
中以获取映射,而这不能。它保留第一级的键,如果您迭代值()确定,则会丢失,但如果使用项()则不会
不会变平,但保留了dict的深度-
——所以说你必须将其变平是错误的。你真的应该在这个答案中添加这个注释,因为这是最好的方法。
>>> sorted(d.keys(), key=lambda k: d[k]['l']['created_on'])
[2, 1, 3]