我有一个列表如下:
[['a', 123], ['b', 456], ['c', 789]]
Run Code Online (Sandbox Code Playgroud)
和字符串 cba
我想根据第一项和字符串cba所在的顺序对列表进行排序:
[['c', 789], ['b', 456], ['a', 123]]
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
这工作得很好与key基于使用list.sort/ sorted:
mylist = [['a', 123], ['b', 456], ['c', 789]]
mykey = 'cba'
mylist.sort(key=lambda x: mykey.index(x[0]))
Run Code Online (Sandbox Code Playgroud)
如果密钥字符串是巨大的,重复index调用将是低效的(dict如果那是一个问题mykeydict = {k: i for i, k in enumerate(mykey)},那么在一次传递中将值映射到索引,例如,然后key=lambda x: mykeydict[x[0]]),但是对于短到中等长度,index调用足够便宜(它仅执行每个项目一次mylist,而不是每次比较).