我有一个列表如下:
[['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
中的每个项目执行一次,而不是每次比较都执行一次)。
关于Python:根据项目和外部键对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264370/