У меня есть диктофон, как показано ниже, и пытается сортировать его по ключам (которые являются объектами даты):
def t(date_st):
return datetime.strptime(date_st, '%d-%m-%Y')
def sort_dict_data(data):
keylist = data.keys()
keylist.sort()
sorted_x = {}
for key in keylist:
sorted_x.update({datetime.strftime(key, '%d-%m-%Y'):data.get(key)})
return sorted_x
print sort_dict_data({t('07-07-2012'): 3.5, t('09-07-2012'): 9.0, t('08-07-2012'): 5.0})
results: {'07-07-2012': 3.5, '09-07-2012': 9.0, '08-07-2012': 5.0}
Как я могу это понять:
{'07-07-2012': 3.5, '08-07-2012': 5.0, '09-07-2012': 9.0}
Заранее спасибо.
У диктатов нет надежного порядка.
OrderedDict
этого вы можете использовать OrderedDict
.
def sort_dict_data(data):
return OrderedDict((datetime.strftime(k, '%d-%m-%Y'), v)
for k, v in sorted(data.iteritems()))
Смотрите, как работает онлайн: ideone
Обратите внимание, что заказы OrderedDict
соответствуют порядку вставки, а не по порядку. Вышеупомянутый код вставляет элементы в OrderedDict
в порядке OrderedDict
, давая вам результат, который вы хотите. Но важно помнить, что любые последующие дополнения, которые вы вносите в словарь, будут отображаться в конце, а не в правильном положении в соответствии с порядком клавиш.
OrderedDict сохраняет порядок вставки (хронологию), а не порядок клавиш. Обычный запрет тоже не сохраняется.
Для словарей, отсортированных по ключам, вам, скорее всего, понадобится дерево Treap, красно-черное дерево или одна из многих других древесных структур данных, известных компьютерной науке.
Treaps быстро в среднем, но будет немного медленным один раз в редкий момент, так как он перебалансирует себя.
Красно-черные деревья хорошо известны, относительно сложны (по сравнению с treaps), и в среднем дают показатели ОК. Их главным преимуществом является то, что они не имеют высокой переменной производительности, что делает их иногда приятными в пользовательских интерфейсах.
Недавно я сравнивал производительность структур данных, подобных диктофонам, но с сортированными ключами. Его можно найти здесь: http://stromberg.dnsalias.org/~strombrg/python-tree-and-heap-comparison/