在python中,按父列表顺序对父列表的子列表排序

在python中,按父列表顺序对父列表的子列表排序,python,python-3.x,Python,Python 3.x,我正在尝试使用Python按父列表顺序对父列表的子列表进行排序 parent_list = ['a', 'b', 'c', 'd', 'e', 'f'] child_list = ['e', 'd', 'b'] 预期产出: child_list = ['b', 'd', 'e'] 我试过如下: child_list.sort(key = lambda i: parent_list.index(i)) 错误: ValueError: 'a' is not in list 虽然您发布的代码有

我正在尝试使用Python按父列表顺序对父列表的子列表进行排序

parent_list = ['a', 'b', 'c', 'd', 'e', 'f']
child_list = ['e', 'd', 'b']
预期产出:

child_list = ['b', 'd', 'e']
我试过如下:

child_list.sort(key = lambda i: parent_list.index(i))
错误:

ValueError: 'a' is not in list

虽然您发布的代码有效(如果它给您一个错误,那么您必须使用不同的代码或不同的数据),但效率低下:需要从头到尾(可能)搜索子列表中的每个元素的父列表。这么短的列表并不重要,但当这些列表的长度达到数千时,你可能会开始注意到

一种更有效的方法是首先从父列表中创建一个字典,将元素映射到索引,然后使用该字典进行排序

>索引={i:e代表e,i在枚举(父列表)中]
>>>指数
{'a':0,'b':1,'c':2,'d':3,'e':4,'f':5}
>>>child_list.sort(key=lambda e:index[e])

应该可以,在本例中确实可以。您是否运行了导致此错误的其他代码?您想做什么?将子列表的成员按其在父列表中的相同顺序放置?请尝试:
child\u list.sort(key=lambda i:parent\u list.index(i[0])
仅当元素出现在
parent\u list
中时才起作用。请注意,在编写
key=lambda thing:something(thing)
的情况下,您通常只需编写
key=something
。谢谢。正如你所说,由于代码的另一部分,我得到了错误。很抱歉给您添麻烦。如果我有两个这样的列表``parent_list=['a','b','c','d','e','f']和child_list=['e','d','b','k','j']```,我如何删除(键不在父列表中)
'k'和'j'
已排序子列表中的元素?
子列表=已排序(过滤器(索引中的lambda e:e,子列表),key=lambda e:index[e])
子列表=已排序(如果索引中有e,则子列表中的e表示e),键=…)