最有效的方法是创建从单词到顺序的映射:
ordering = {word: i for i, word in enumerate(predefined_list)}
然后在排序中使用该映射:
somelist.sort(key=ordering.get)
另一种方法是.index()
在列表中使用来扫描列表并在排序时找到每个单词的索引:
somelist.sort(key=predefined_list.index)
但这并不像使用ordering
字典那样有效。
演示:
>>> predefined_list = ['id','name','age','height','weight',]
>>> ordering = {word: i for i, word in enumerate(predefined_list)}
>>> sorted(['height','id'], key=ordering.get)
['id', 'height']
>>> sorted(['name','weight','height'], key=ordering.get)
['name', 'height', 'weight']
如果预定义列表中的任何值不是唯一的,这两种方法将导致不同的排序顺序。该.index()
方法使用第一次出现的值作为排序值,而字典方法将使用最后一次出现的值。有一些方法可以解决这个问题,例如,您可以让字典方法反向处理列表和索引。