基于键排序列表的python排序列表

Yar*_*nST 9 python sorting list

我有一个预定义的列表,表明一些值的顺序:

['id','name','age','height','weight',]
Run Code Online (Sandbox Code Playgroud)

(可能很长)

我想对此列表的任何子集进行排序:

所以,如果我得到['height','id']它将成为['id','height']

['name','weight','height']--->['name','height','weight']

是否有某种方法可以sort使用key参数以某种方式使用该功能?或者我应该使用自定义方法,如果是这样,最有效的方法是什么?

Mar*_*ers 16

最有效的方法是从一个单词到另一个单词创建一个地图:

ordering = {word: i for i, word in enumerate(predefined_list)}
Run Code Online (Sandbox Code Playgroud)

然后在排序中使用该映射:

somelist.sort(key=ordering.get)
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用.index()列表扫描列表并在排序时查找每个单词的索引:

somelist.sort(key=predefined_list.index)
Run Code Online (Sandbox Code Playgroud)

但这不是几乎与使用高效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']
Run Code Online (Sandbox Code Playgroud)

如果预定义列表中的任何值不唯一,则这两种方法将导致不同的排序顺序.该.index()方法使用第一次出现的值作为排序值,字典方法将使用最后一个值.有很多方法,例如,您可以使字典方法处理列表和反向索引.