Python 基于完全匹配和/或部分匹配的排序列表

Python 基于完全匹配和/或部分匹配的排序列表,python,sorting,Python,Sorting,我想返回一个排序列表,使用完整匹配或前缀匹配的列表。我可以演示一个只适用于完全匹配的函数sorted_schedule # This is the defined order (CONSTANT) WEEKDAY_ORDER = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] # This is my working function def sorted_schedule(s): return sorted(s, ke

我想返回一个排序列表,使用完整匹配或前缀匹配的列表。我可以演示一个只适用于完全匹配的函数
sorted_schedule

# This is the defined order (CONSTANT)
WEEKDAY_ORDER = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

# This is my working function
def sorted_schedule(s):
    return sorted(s, key=lambda k: WEEKDAY_ORDER.index(k))

# Given an unordered set, return a sorted list
schedule1 = set(['Wednesday', 'Friday'])
print(schedule1)  # set(['Friday', 'Wednesday'])
print(sorted_schedule(schedule1))  # ['Wednesday', 'Friday']
但是,它不适用于前缀匹配,也就是说,开头是工作日顺序中的匹配,但项目的其余部分不相关

schedule2 = set(['Wednesday afternoon', 'Friday'])
print(sorted_schedule(schedule2))
# ValueError: 'Wednesday afternoon' is not in list

我猜我需要为
键提供一个不同的函数,但我不确定如何实现。

取字符串的第一部分。(
周三
周三下午开始

>>工作日\u顺序=[“周一”、“周二”、“周三”、“周四”、“周五”]
>>>
>>>def分拣计划表:
...     返回已排序的(s,key=lambda k:WEEKDAY_ORDER.index(k.split()[0]))#>>schedule2=set(['星期三下午','星期五']))
>>>打印(按附表(附表2)排序)
[‘星期三下午’、‘星期五’]

你的名字总是排在第一位吗?没有诸如“本周三”或“下周五”之类的磨损?始终使用前缀,从不使用“本周三”
>>> WEEKDAY_ORDER = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
>>>
>>> def sorted_schedule(s):
...     return sorted(s, key=lambda k: WEEKDAY_ORDER.index(k.split()[0]))  # <---
...
>>> schedule2 = set(['Wednesday afternoon', 'Friday'])
>>> print(sorted_schedule(schedule2))
['Wednesday afternoon', 'Friday']