如何根据日期时间排序此字典?
我如何根据日期时间排序这个字典? 这可能吗?如何根据日期时间排序此字典?
{
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)}}
}
无法排序的字典()本身。该字典有没有隐式的顺序:
>>> 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
我没有看到这个版本如何保持完整的结构,或者'sorted(d.items()...'如何失败?尤其是它可以用OrderedDict封装来获得映射,而这不能, – agf
它保留了第一级的键,如果你迭代的值() – rocksportrocker
好了,但如果你使用'items()'不平坦,但保留深度'dict' - 所以说你必须把它弄平它是错误的,你应该真的把这个评论加入到这个答案中,因为这是做这件事的最好方法。 – agf
你可以得到钥匙的排序列表为你的字典d
(字典本身不能进行排序):
>>> sorted(d.keys(), key=lambda k: d[k]['l']['created_on'])
[2, 1, 3]
PS:如果你真的需要一个带有排序键的字典,现在标准的OrderedDict类型是你的朋友(正如在frédéric的回答之后由rocksportrocker和agf发表的评论中所描述的那样)。
如果你想保留所有信息:sorted(d.items(),key = lambda k,it:it [“l”] [“created_on”]) – rocksportrocker
你可以在那里包装@rocksportrocker方法'OrderedDict()'如果你想把它作为一个映射。 – agf