Python 基于另一个嵌套列表对嵌套列表进行排序
我有两个嵌套列表,x1和x2。我需要根据x1[0][0]的顺序使用x2 我尝试过使用sort和一些lambda x,但不完全确定如何实现这一点Python 基于另一个嵌套列表对嵌套列表进行排序,python,sorting,string-matching,nested-lists,Python,Sorting,String Matching,Nested Lists,我有两个嵌套列表,x1和x2。我需要根据x1[0][0]的顺序使用x2 我尝试过使用sort和一些lambda x,但不完全确定如何实现这一点 x1 = [["d", 0.4, 1], ["c", 0.5, 2], ["b", 0.3, 3], ["a", 0.5, 4]] x2 = [["c", 4, 1], ["d", 2, 2], ["a", 6, 3], ["b", 6, 4]] 对于重新排序的x2,我希望得到以下输出 x2
x1 = [["d", 0.4, 1],
["c", 0.5, 2],
["b", 0.3, 3],
["a", 0.5, 4]]
x2 = [["c", 4, 1],
["d", 2, 2],
["a", 6, 3],
["b", 6, 4]]
对于重新排序的x2,我希望得到以下输出
x2 = [["d", 2, 2],
["c", 4, 1],
["b", 6, 4],
["a", 6, 3]]
我不能依赖于基于字母顺序的重新排序,因为我使用的数据集与此不同,我可能会遇到其他问题。理想情况下,我需要编写一些东西,将每个嵌套列表与x2在x1中出现的顺序相匹配,仅基于每个嵌套列表的第一个元素,该元素始终是字符串
我只需要使用pythons标准库就可以做到这一点。您可以构建一个dict,使用enumerate将x1中的键映射到其索引,然后使用一个键函数对x2进行排序,该函数从映射的键返回索引:
order = {k: i for i, (k, *_) in enumerate(x1)}
x2.sort(key=lambda t: order[t[0]])
x2变成:
您可以使用enumerate构建将x1中的键映射到其索引的dict,然后使用从映射键返回索引的键函数对x2进行排序:
order = {k: i for i, (k, *_) in enumerate(x1)}
x2.sort(key=lambda t: order[t[0]])
x2变成:
请尝试以下操作:
x1=[[a,1],
[b,2],
[c,3],
[d,4]]
x2=[[b,1],
[d,2],
[a,3],
[c,4]]
x2.sortkey=lambda k:dictx1[k[0]]
x2
这个输出
[['a', 3], ['c', 4], ['b', 1], ['d', 2]]
请尝试以下操作:
x1=[[a,1],
[b,2],
[c,3],
[d,4]]
x2=[[b,1],
[d,2],
[a,3],
[c,4]]
x2.sortkey=lambda k:dictx1[k[0]]
x2
这个输出
[['a', 3], ['c', 4], ['b', 1], ['d', 2]]
这个例子并不清楚。这相当于根据x2本身第一个元素的排序顺序进行排序。@Austin我刚刚对其进行了更新,以更好地反映我所追求的。对不起,我不清楚。一个基本的排序可以在我拥有的数据集上运行,但不能在我的真实数据集上运行。这相当于根据x2本身第一个元素的排序顺序进行排序。@Austin我刚刚对其进行了更新,以更好地反映我所追求的。对不起,我不清楚。一个基本的排序可以处理我所拥有的数据,但不能处理我的真实数据集。@blhsing,谢谢你的帮助!我只是通过数据更新,以更好地反映我使用的真实数据集。由于有额外的值,我在数据上使用您的解决方案时遇到值错误。很高兴能提供帮助。我已经相应地更新了我的答案。@blhsing,谢谢你的帮助!我只是通过数据更新,以更好地反映我使用的真实数据集。由于有额外的值,我在数据上使用您的解决方案时遇到值错误。很高兴能提供帮助。我已经相应地更新了我的答案。