Сортировка словаря (с ключами даты) в 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})]
Ответ 6
Python 2.7 (выпущен 3 июля 2010 г.) поддерживает упорядоченный тип словаря:
http://www.python.org/download/releases/2.7/