Python:根据不同的字母顺序排序

时间:2014-12-02 15:40:21

标签: python python-2.7 sorting

假设我有一个不同顺序的字母:{H,V,R,L,D,A}。现在我想根据此顺序将字符串排序为'HV'。我期待的东西应该是这样的:

$ alphabet = 'HVRLDA'
$ sorted(['RL','HH','AH'], key=lambda word: [alphabet.index(c) for c in word])
['HH','RL','AH']

这是Sorting string values according to a custom alphabet in Python中已提到的任务。如果其中一个字符串包含此字母表外的字符,则脚本将中止并显示错误消息:

ValueError: substring not found

问题

我希望Python根据他们的ASCII代码处理非出现的字符。在这个意义上,其余字母应附加到此字母表中。

感谢您的回复,我希望这个问题也可以帮助其他人。

1 个答案:

答案 0 :(得分:8)

如果c中没有该字符,您可以使用条件表达式返回alphabet的ASCII代码:

sort(['RL','HH','DA','AH'], 
     key=lambda word: [alphabet.index(c) if c in alphabet else ord(c) for c in word])

我会为alphabet使用词典,但是,您可以在此处使用dict.get()

alphabet = {'H': 0, 'V': 1, 'R': 2, 'L': 3, 'D': 4, 'A': 5}
sort(['RL','HH','DA','AH'], 
     key=lambda word: [alphabet.get(c, ord(c)) for c in word])

从输入字符串生成该字典很容易:

alphabet = {c: i for i, c in enumerate(alphabet_string)}