好的,假设您只有星期几和时间戳记.一种替代方法是计算每个项目的分钟数(星期一00:00 = 0分钟,星期日23:59 =最大分钟),然后使用该函数进行排序.
下面的示例按第一个时间戳值排序. SO:er同事的一条评论指出,其中不包括第二个时间戳(结束时间).为此,我们可以通过反转每天的分钟数来添加一个十进制值.
((int(h2)* 60 + int(m2))/24*60) # minutes divided by maximum minutes per day gives a decimal number
但是,这里的关键是以下代码:
weekday[day]*24*60 + int(h1)*60 + int(m1) # gets the total minutes passed, we sort with this!
当然还有带联接的排序功能(双折行).当您将一个键传递给sorted()并且该键是一个函数时,排序将基于该函数的返回值(即分钟数).
'
'.join(sorted(list_, key=get_min))
足够的文字…让我们跳到完整的示例更新版本
import io
file= """Monday,10:50-11:32
Friday,18:33-18:45
Sunday,17:10-17:31
Sunday,17:10-15:11
Friday,21:10-23:11"""
list_ = [i.strip('
') for i in io.StringIO(file).readlines() if i != "
"]
weekday = dict(zip(["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],[0,1,2,3,4,5,6]))
def get_min(time_str):
day,time = time_str.split(",")
h1, m1 = time.split('-')[0].split(":")
h2, m2 = time.split('-')[1].split(":")
return weekday[day]*24*60 + int(h1)*60 + int(m1) + ((int(h2)* 60 + int(m2))/24*60)
with open("output.txt", "w") as outfile:
outfile.write('
'.join(sorted(list_, key=get_min)))
print('
'.join(sorted(list_, key=get_min)))
创建带有以下内容的“ output.txt”:
Monday,10:50-11:32
Friday,18:33-18:45
Friday,21:10-23:11
Sunday,17:10-15:11
Sunday,17:10-17:31