То, что у вас есть, хорошо для года (основной ключ).Вам просто нужна небольшая адаптация, чтобы использовать месяц (минорный ключ), когда год равен, и вы можете расширить его на столько уровней клавиш, сколько захотите.
Псевдокод только для домашней работы, я 'я боюсь:
def compare (date1, date2):
if date1.year > date2.year:
return 1
if date1.year < date2.year:
return -1
# Years are equal here.
if date1.month > date2.month
return 1
if date1.month < date2.month
return -1
# Years and months are equal here.
if date1.day > date2.day
return 1
if date1.day < date2.day
return -1
# Years, months and days are all equal here.
return 0
Выполнив одну «многоуровневую» функцию сравнения, подобную этой, вам не нужно будет беспокоиться о сортировке по месяцам с разбивкой по годам, поскольку она сортируется по дням в течение месяца в течение года.
И, как вы можете видеть, я не большой поклонник:
if condition:
return something
else:
carry on
идиомы.else
совершенно не нужен и может вызвать огромные уровни отступов там, где они не нужны.Я предпочитаю:
if condition:
return something
carry on
Фактический метод сортировки лучше всего сделать, превратив названия этих месяцев в числовые значения, чтобы сравнения работали лучше.Это, вероятно, лучше оставить для другого вопроса, но вы могли бы собрать что-то с массивом строк:
char *months[] = {"January", "February", ... "December"};
и циклом for
для преобразования имени в значение в диапазоне от 0
до 11
.