我试图排序一个二维列表,同时按其中一个维度优先排序。
例子:
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]]
我尝试按以下顺序对其排序,首先沿第二维度排序,然后沿第一维度排序,同时保持第二维度的顺序。所以我期望的排序列表如下
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]]
我试图先沿第二维度排序,然后再沿第一维度排序,但这样做会改变顺序。
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])
我得到以下结果:
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]]
我们也可以用IF条件来完成这一点,但我想知道是否有捷径或熊猫存在捷径?
最佳答案
您需要在同一个排序键中考虑这两个值。通常,python会按[0]
值排序,然后按[1]
值排序。我们可以通过创建一个反转值的键来利用它:
sorted(twod_list,key=lambda l:(l[1], l[0]))
现在Python将首先根据键的
[0]
排序,这是原始键的[1]
,然后根据键的[1]
排序,这是原始键的[0]
。