Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于另一个嵌套列表对嵌套列表进行排序_Python_Sorting_String Matching_Nested Lists - Fatal编程技术网

Python 基于另一个嵌套列表对嵌套列表进行排序

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和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 = [["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,谢谢你的帮助!我只是通过数据更新,以更好地反映我使用的真实数据集。由于有额外的值,我在数据上使用您的解决方案时遇到值错误。很高兴能提供帮助。我已经相应地更新了我的答案。