我有一个列表如下:
[['a', 123], ['b', 456], ['c', 789]]
和字符串cba
我想根据第一项和字符串 cba 所在的顺序对列表进行排序:
[['c', 789], ['b', 456], ['a', 123]]
解决此问题的最佳方法是什么?
请您参考如下方法:
这对于基于 key 的 list.sort/sorted 使用非常有效:
mylist = [['a', 123], ['b', 456], ['c', 789]]
mykey = 'cba'
mylist.sort(key=lambda x: mykey.index(x[0]))
如果键字符串很大,重复的 index 调用将是低效的(如果这是一个问题,请制作一个 dict 将值映射到单次传递中的索引,例如 mykeydict = {k: i for i, k in enumerate(mykey)}, then key=lambda x: mykeydict[x[0]]), 但对于短到中等长度,index 调用足够便宜(它只对 mylist 中的每个项目执行一次,而不是每次比较都执行一次)。
