如何使用python以给定的字母顺序排序列表?

时间:2017-04-29 11:03:50

标签: python python-2.7

输入:

Alpha = ['d', 'c', 'a', 'b']
words = ['dda', 'bdb', 'adc', 'cdd']

如何按Alpha的顺序对单词进行排序以获得以下结果?

words = ['dda', 'cdd', 'adc', 'bdb']

你能告诉我如何做到这一点吗?

这里我试图对列表进行排序,但不是字典键

3 个答案:

答案 0 :(得分:1)

你可以使用带键的排序功能:

>>> Alpha = ['d', 'c', 'a', 'b']
>>> words = ['dda', 'bdb', 'adc', 'cdd']
>>> sorted(words, key=lambda x:Alpha.index(x[0]))
['dda', 'cdd', 'adc', 'bdb']

答案 1 :(得分:1)

你可以使用它,它将根据第一个字母的alpha索引进行排序。

alpha = ['d', 'c', 'a', 'b']
words = ['dda', 'bdb', 'adc', 'cdd']
words.sort(key=lambda x: alpha.index(x[0]))

输出:

  

" DDA" " CDD" " ADC" " BDB"

答案 2 :(得分:1)

这将根据您在alpha中指定的顺序按字典顺序对单词进行排序,方法是为每个单词制作一个索引列表(Python then compares lexicographically

def sort_key(w):
    return [alpha.index(ch) for ch in w]

words.sort(key=sort_key)

可能有更高效的解决方案将密钥存储在哈希中(如the answer to this question中所示)。

另一种方法是将您的alpha转换为string.translate转换表。

ascii_characters = ''.join(chr(i) for i in range(256))
translation = string.maketrans(''.join(alpha), ascii_characters[:len(alpha)])
words.sort(key=lambda w: w.translate(translation))

这种方式的一个优点是您可以将翻译放入字典中(可能)更快。

order = {w: w.translate(translation) for w in words}
words.sort(key=lambda w: order[w]))