我希望按照排序(列表)方法对列表进行排序,但需要按字符串排序。我的意思是,不是按'abcdefghijklmnopqrstuvwxyz'排序,而是能够控制它。比如,按照'zyabxwcdvueftsghrqijpoklmn'的顺序排序,但是根据您输入的任何26个字母的字符串进行排序。我该怎么做?
排序(列表)方法将列表按字母顺序排序。如果我想要反向字母顺序,那也是相当简单的。但是说我想要一个完全自定义的字母优先权?默认值按照'abcdefghijklmnopqrstuvwxyz'
的顺序对列表进行排序。如果我可以输入一个字符串,如'zyabxwcdvueftsghrqijpoklmn'
,我可以根据此优先级对列表进行排序,该怎么办?因此,给定['moose', 'apple', 'zebra', 'penguin']
和字符串'zyabxwcdvueftsghrqijpoklmn'
,我会得到['zebra', 'apple', 'penguin', 'moose']
,因为字母出现在字符串中的顺序。
答案 0 :(得分:5)
def make_sort_key(key_string):
# make index
index = {}
for i,ch in enumerate(key_string):
index[ch] = i
# sort any char not in index following any char in index
omitted = len(index)
val = index.get
def key_fn(s):
return [val(ch, omitted) for ch in s]
return key_fn
然后
items = [
"abcde",
"fghij",
"fghde"
]
items.sort(key = make_sort_key("gfiabdcej"))
结果
['fghij', 'fghde', 'abcde']