Сортировка списка кортежей по месяцам

#python

#python

Вопрос:

У меня есть что-то вроде этого

 print(x)
 >>> [('01/01-01/03', 4), ('01/06-01/10', 5), ('01/13-01/17', 4), ('01/20-01/24', 5), ('01/27-01/31', 5), ('02/03-02/07', 5) ... ]

 

за целый год.

Он содержит str количество дней в неделе и количество рабочих дней (5 — праздничные дни). Я хотел бы разобраться с этим list tuples , чтобы начать с июля (7-й месяц).

Так что что-то вроде этого

 x.sort(first occurrence of `07/` in str of index 0 of tuples in list)
 

Комментарии:

1. Что именно означает «сортировать, чтобы начать с июля»? Что происходит, например, с январем?

2. Июль -> Август -> Сентябрь -> Октябрь -> Ноябрь -> Декабрь -> Январь …. (до июня)

Ответ №1:

Я думаю, это делает то, что вы хотите:

 data = [('01/01-01/03', 4), ('01/06-01/10', 5), ('01/13-01/17', 4), ('01/20-01/24', 5), ('01/27-01/31', 5), ('02/03-02/07', 5),
        ('07/20-07/24', 5), ('07/27-07/31', 5), ('08/03-08/07', 5)]

def sort_key(t):
    m = re.match(r"(dd)/(dd)-dd/dd", t[0])
    month = int(m.group(1))
    day = int(m.group(2))
    if month < 7:
        month  = 12
    return month * 100   day

data_sorted = sorted(data, key=sort_key)

print(data_sorted)
 

Результат:

 [('07/20-07/24', 5), ('07/27-07/31', 5), ('08/03-08/07', 5), ('01/01-01/03', 4), ('01/06-01/10', 5), ('01/13-01/17', 4), ('01/20-01/24', 5), ('01/27-01/31', 5), ('02/03-02/07', 5)]