Сортировка словаря (с ключами даты) в Python

У меня есть словарь. Ключами являются даты (дата и время). Мне нужно отсортировать словарь так, чтобы значения в словаре сортировались по дате - так что, итерации через словарь, я обрабатываю элементы в желаемом хронологическом порядке (то есть дату/время).

Как я могу сортировать такой словарь по дате?

Пример:

mydict = { '2000-01-01': {fld_1: 1, fld_2: 42}, '2000-01-02': {fld_1:23, fld_2: 22.17} }

Примечание. Я использую здесь строки вместо datetime, чтобы простой пример

Ответ 1

Если вы используете Python 2.7+ или 3.1+, вы можете создать OrderedDict из collections из своего словаря и затем перебираем через это.

ordered = OrderedDict(sorted(mydict.items(), key=lambda t: t[0]))

Однако, в зависимости от того, что вы хотите сделать, возможно, проще перебирать отсортированный список ключей из вашего dict.

Ответ 2

Словари никогда не хранят ничего в некотором порядке. Но вы можете получить список ключей, используя d.keys(), которые можно сортировать. Итерации над генератором, как показано ниже.

def sortdict(d):
    for key in sorted(d): yield d[key]

Используя это, вы сможете перебирать значения в хронологическом порядке.

for value in sortdict(mydict):
    # your code
    pass

Ответ 3

Словари являются несортируемыми. Итерации над sorted(mydict.keys()).

Ответ 4

Я уверен, что python знает, как сравнивать даты. Итак:

def sortedDictValues(adict):
 items = adict.items()
 items.sort()
 return [value for key, value in items]

Ответ 5

так как строки даты, похоже, находятся в правильном формате, который вы могли бы просто сделать:

>>> sorted(mydict.items())         # iteritems in py2k
[('2000-01-01', {'fld_2': 42, 'fld_1': 1}), ('2000-01-02', {'fld_2': 22.17, 'fld_1': 23})]