Как я могу отсортировать этот dict за дату и время? - PullRequest
2 голосов
/ 26 сентября 2011

Как я могу отсортировать этот dict за дату и время?Возможно ли это?

{
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 ]

4 голосов
/ 26 сентября 2011

Вы можете вызвать функцию sorted () для значений, с датой и временем в качестве ключа сравнения:

sorted(d.values(), key=lambda item: item["l"]["created_on"])
3 голосов
/ 26 сентября 2011

Вы можете получить отсортированный список ключей для вашего словаря d (словари не могут быть отсортированы сами по себе):

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

PS: Если вам действительно нужен словарь с отсортированными ключами, теперь ваш стандартный тип OrderedDict - ваш друг (как описано в комментариях rockportrocker и agf после ответа Фредерика).

1 голос
/ 26 сентября 2011

Нельзя сортировать сам 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...