我有一个这样的数组:
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'
答案 0 :(得分:1)
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。