基于特殊要求的另一个数组对数组进行排序

时间:2016-11-25 19:04:46

标签: python arrays python-2.7 sorting

我有一个这样的数组:

master = ['aa','bb','cc','dd','ee','ff']

我需要按照这个来排序:

order = ['c','e','a','b']

所以最终答案如下:

['cc','ee','aa','bb','dd','ff']

问题是,如果项目不在订单数组中,那么它将会结束,我不知道该怎么做。

你会怎么做?我试过了:

master.sort(key=lambda x: order.index(x))

但如果x数组中没有order,则会崩溃,例如'dd''ff'

2 个答案:

答案 0 :(得分:1)

您可以使用maketranstranslate

master = ['aa','bb','cc','dd','ee','ff']
order = 'ceab'
trantab = str.maketrans(order, 'abcdefghijklmnopqrstuvwxyz'[:len(order)])
master.sort(key=lambda x: x.translate(trantab))

根据您对订单值的期望,例如'fecd',您还可以按如下方式创建转换表:

trantab = str.maketrans(order, ''.join(sorted(order)))

...在'f'之前保持'a'和'b'排序。

答案 1 :(得分:0)

master = ['aa','bb','cc','dd','ee','ff']
order = 'ceab'

sorted(master, key = lambda word: [order.index(c) if c in order else ord(c) for c in word])

有关详细信息,请参阅Python: Sorting according to a different alphabetic order