基于字符串Python对列表进行排序

时间:2015-02-11 22:25:10

标签: python string list sorting

我希望按照排序(列表)方法对列表进行排序,但需要按字符串排序。我的意思是,不是按'abcdefghijklmnopqrstuvwxyz'排序,而是能够控制它。比如,按照'zyabxwcdvueftsghrqijpoklmn'的顺序排序,但是根据您输入的任何26个字母的字符串进行排序。我该怎么做?

排序(列表)方法将列表按字母顺序排序。如果我想要反向字母顺序,那也是相当简单的。但是说我想要一个完全自定义的字母优先权?默认值按照'abcdefghijklmnopqrstuvwxyz'的顺序对列表进行排序。如果我可以输入一个字符串,如'zyabxwcdvueftsghrqijpoklmn',我可以根据此优先级对列表进行排序,该怎么办?因此,给定['moose', 'apple', 'zebra', 'penguin']和字符串'zyabxwcdvueftsghrqijpoklmn',我会得到['zebra', 'apple', 'penguin', 'moose'],因为字母出现在字符串中的顺序。

1 个答案:

答案 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']