首页 > 解决方案 > 根据月份对元组列表进行排序

问题描述

我有这样的东西

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 - 节假日)。我想从 7 月(第 7 个月)开始对此list进行排序。tuples

所以像这样

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

标签: python

解决方案


我认为这可以满足您的要求:

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"(\d\d)/(\d\d)-\d\d/\d\d", 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)]

推荐阅读