如何对二维列表进行排序,同时沿其中一维赋予优先级

Sat*_*h K 3 python sorting numpy list pandas

我正在尝试对二维列表进行排序,同时优先考虑对其中一个维度进行排序。

例:

twod_list = [[116.2,103.4],[124.9,103.4],[129.5,103.4],
             [144.6,103.4],[148.9,103.4],
             [119.1,109.3],[125.9,103.4],[146.3,109.3],[135.8,103.4]]
Run Code Online (Sandbox Code Playgroud)

我试图按以下顺序对此进行排序,首先沿第二维排序,然后沿第一维排序,同时保持第二维的顺序。所以我的预期排序列表如下所示

sorted_twod_list = [[116.2,103.4],[124.9,103.4],[125.9,103.4],[129.5,103.4],[135.8,103.4],
             [144.6,103.4],[148.9,103.4],
             [119.1,109.3],[146.3,109.3]]
Run Code Online (Sandbox Code Playgroud)

我尝试先沿第二维排序,然后再按第一维排序,但这样做会改变顺序。

twod_list = [[116.2,103.4],[124.9,103.4],[129.5,103.4],
             [144.6,103.4],[148.9,103.4],
             [119.1,109.3],[124.9,103.4],[146.3,109.3],[135.8,103.4]]
twod_sorted_on_y = sorted(twod_list,key=lambda l:l[1])
twod_sorted = sorted(twod_sorted_on_y,key=lambda l:l[0])
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

twod_sorted = [[116.2, 103.4],[119.1, 109.3],[124.9, 103.4],
               [124.9, 103.4],[129.5, 103.4],
               [135.8, 103.4],[144.6, 103.4],[146.3, 109.3],[148.9,103.4]]
Run Code Online (Sandbox Code Playgroud)

我们也可以使用if条件来完成此操作,但是我想知道是否使用numpy或pandas存在捷径?

Kar*_*tel 5

您需要在同一排序键中考虑这两个值。通常,Python将按[0]值排序,然后按[1]值排序。我们可以通过创建一个反转值的键来利用它:

sorted(twod_list,key=lambda l:(l[1], l[0]))
Run Code Online (Sandbox Code Playgroud)

现在,Python会首先排序依据的[0]关键,这是[1]原来的,然后根据[1]关键,这是[0]原来的。