使用 Python 中用户提供的顺序对字符串列表进行排序
Sort a list of strings using a user-provided order in Python
我有一个字符串列表,比如 ['ayyaaauu', 'shhasyhh', 'shaash']
和一个随附的订单列表 ['s', 'y', 'u', 'h', 'a']
。
我想使用排序列表代替排序中使用的正常字母顺序对字符串列表进行排序。
sorted(['ayyaaauu', 'shhasyhh', 'shaash'])
会 return ['ayyaaauu', 'shaash', 'shhasyhh']
,按字母顺序排序。
我希望排序功能为return['shhasyhh', 'shaash', 'ayyaaauu']
,也就是排序列表中指定的字母顺序。
类似this one的问题只有在您只考虑字符串的第一个元素时才有用。如果前面的字母相同,我想按顺序考虑整个字符串。
P.S。实际上,我使用顺序列表中的字母生成字符串列表,因此字符串中的所有字母都有“正确”的顺序。
您可以使用sorted()
,然后通过使用map()
将每个字母映射到其优先级来生成key
参数(sorted()
然后使用元组比较生成排序):
data = ['ayyaaauu', 'shhasyhh', 'shaash']
ordering = ['s', 'y', 'u', 'h', 'a']
priorities = {letter: index for index, letter in enumerate(ordering)}
result = sorted(data, key=lambda x: tuple(map(lambda y: priorities[y], x)))
# Prints ['shhasyhh', 'shaash', 'ayyaaauu']
print(result)
我有一个字符串列表,比如 ['ayyaaauu', 'shhasyhh', 'shaash']
和一个随附的订单列表 ['s', 'y', 'u', 'h', 'a']
。
我想使用排序列表代替排序中使用的正常字母顺序对字符串列表进行排序。
sorted(['ayyaaauu', 'shhasyhh', 'shaash'])
会 return ['ayyaaauu', 'shaash', 'shhasyhh']
,按字母顺序排序。
我希望排序功能为return['shhasyhh', 'shaash', 'ayyaaauu']
,也就是排序列表中指定的字母顺序。
类似this one的问题只有在您只考虑字符串的第一个元素时才有用。如果前面的字母相同,我想按顺序考虑整个字符串。
P.S。实际上,我使用顺序列表中的字母生成字符串列表,因此字符串中的所有字母都有“正确”的顺序。
您可以使用sorted()
,然后通过使用map()
将每个字母映射到其优先级来生成key
参数(sorted()
然后使用元组比较生成排序):
data = ['ayyaaauu', 'shhasyhh', 'shaash']
ordering = ['s', 'y', 'u', 'h', 'a']
priorities = {letter: index for index, letter in enumerate(ordering)}
result = sorted(data, key=lambda x: tuple(map(lambda y: priorities[y], x)))
# Prints ['shhasyhh', 'shaash', 'ayyaaauu']
print(result)