python - 如何在优先考虑其中一个维度的同时对二维列表进行排序

标签 python pandas list numpy sorting

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

例子:

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 条件来完成此操作,但我想知道是否存在使用 numpy 或 pandas 的捷径?

最佳答案

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

sorted(twod_list,key=lambda l:(l[1], l[0]))

现在Python会先根据key的[0]排序,也就是原来的[1],然后再根据[ 1]的key,也就是原来的[0]

关于python - 如何在优先考虑其中一个维度的同时对二维列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58502963/

相关文章:

python - 编辑器的 wxPython 段错误

python - 如何将输入设置为 Python 类中的参数

python - Pandas :删除任何列包含特定子字符串的所有行

java - StringTemplate - 如何遍历列表中的列表?

python - 从 python 程序捕获 shell 调用

python - 将相同的操作应用于不同的数据帧

python - 如何在Python中更有效地对csv文件中的列求和

list - 普通口齿不清 : Attach x recursively to list

list - 在 Sharepoint 中,如何使用 REST API 获取在浏览器中打开文档的列表高级设置

python - Cython 作为 Python 到 C 转换器的示例程序